Un lambda est un objet fonction anonyme. Python résout complètement tout ce qui se trouve du côté droit d'une équation en un seul objet anonyme, puis résout tout ce qui se trouve du côté gauche pour l'affectation.
x = lambda: x
compile d'abord lambda: x
en un objet fonction qui renvoie ce qui se trouve dans x
au moment où il est appelé. Il rebondit ensuite x
avec cet objet fonction, en supprimant tout objet qui se trouvait là avant.
Maintenant x
est une fonction qui renvoie ce qui se trouve dans x
... qui est une fonction qui renvoie tout ce qui se trouve dans x
etc... Vous pouvez donc écrire x()()()()()()
autant de fois que tu veux, et tu obtiendras toujours l'original. lambda:x
objet de la fonction.
Les fonctions Python possèdent un espace de noms local, mais seules les variables affectées dans la fonction y résident. Puisque x
n'est pas attribué dans le lambda
il est résolu dans la portée qui le contient, c'est-à-dire au niveau du module "x". Un morceau de code identique est
def x():
return x
Comparez cela avec
def x():
x = 1
return x
Maintenant, le paramètre x
est une variable locale et n'est pas liée à la variable globale x
.
4 votes
C'est comme si
def x(): return x
.