Vou tentar explicar sim, Edson! Mas me diz, de onde você pegou esse código? Porque, para falar a verdade, ele está bastante confuso e não muito pythônico hehe. O código também tem o problema que, caso haja um empate, ele não vai retornar a primeira substring do empate.
De qualquer jeito, acho que aqui cabe explicar só a função reduce()
. Antes, queria avisar que em breve vai sair um post bem legal no blog da Caelum sobre programação funcional em Python, que vai incluir uma explicação dessa função e, ainda, o porquê de seu uso não ser recomendado!
Basicamente, a função reduce()
vai reduzir uma lista de valores a um só. Nesse caso, cada valor é um caractere da string original. O que está sendo feito, então, é que, em primeiro lugar, a função achar_maior_sequencia()
está sendo rodada com os parâmetros 'a'
e 'z'
. Em seguida, é rodada de novo com o resultado dessa primeira execução e 'c'
como parâmetros, e assim por diante até que só se tenha um resultado final. Repare que isso fica muito confuso, e esse é o principal motivo que essa função é evitada (e inclusive fortemente criticada pelo próprio criador do Python). Pra ficar mais claro, olha esse código de exemplo:
def soma_numeros(a, b)
return a + b
numeros = [1, 2, 3, 4]
reduce(soma_numeros, numeros)
E olha só como o reduce()
vai funcionar: