lambda parametros : expressão
constroi uma função com código equivalente a:
def anonimo(parametros):
return expressao
excepto pelo facto de alterar a ligacao ao nome anonimo
Exemplos:
>>> quadrado=(lambda x : x*x)
>>> quadrado
>>> quadrado(3)
9
>>>
Geradores (Generators):
Um gerador é qualquer função que contenha pelo menos uma keywork yield. Ao chamar uma função deste tipo, o corpo da função não é executada. Pelo contrário, ao chamar um gerador, é criado um iterador especial que contêm a função, as suas variáveis locais (e parâmetros) e o ponto actual de execução, que é inicialmente definido como o início da função. Ao chamar o método next deste gerador, a execução da função retoma do ponto actual até ao primeiro yield. De uma forma muito práctica, um yield é como um return pois permite retornar um valor para o contexto mas quando a sua execução retoma esta é retomada a partir do yield em vez do início da função. Exemplo:
Imagine-se que queremos uma sequência de números de 1 a N e depois até 1 de novo. (Tirado de Python in a nutshell - Alex Martelli):
def updown(n):
for x in xrange(1, n):
yield x
for x in xrange(n, 0, -1):
yield x
Exemplo de utilização:
for i in updown(3): print i
imprime 1,2,3,2,1