Qu'est-ce que «lambda binding» en Python?
Question
Je comprends ce que sont les fonctions lambda dans Python, mais je ne trouve pas ce que signifie "lambda binding". en recherchant la documentation Python. Un lien à lire à ce sujet serait formidable. Un exemple expliqué trivial serait encore mieux. Merci.
La solution
Tout d'abord, une définition générale:
Quand une déclaration de programme ou de fonction est exécuté, les valeurs actuelles de les paramètres formels sont sauvegardés (sur le pile) et dans le cadre de la déclaration, ils sont liés à la les valeurs des arguments réels présentés dans l'appel. Lorsque la déclaration est abandonné, les valeurs originales de ceux les arguments formels sont restaurés. Ce le protocole est entièrement récursif. Si à l'intérieur le corps d'une déclaration, quelque chose est fait qui provoque les paramètres formels être lié à de nouvelles valeurs, la Le système de lambda-binding garantit que tout cela se passera de manière ordonnée manière.
Maintenant, il existe un excellent exemple python dans une discussion ici :
& ...; il n'y a qu'une seule liaison pour x
: faire x = 7
modifie simplement la valeur de la liaison préexistante. Voilà pourquoi
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
renvoie deux fonctions qui retournent toutes les deux 7; s'il existait une nouvelle liaison après le x = 7
, les fonctions renverraient des valeurs différentes [en supposant que vous n'appeliez pas foo (7), bien sûr. En supposant également que nested_scopes] .... "
Autres conseils
Je n'ai jamais entendu ce terme, mais une explication pourrait être le "paramètre par défaut" hack utilisé pour assigner une valeur directement au paramètre d'un lambda. En utilisant l'exemple de Swati:
def foo(x):
a = lambda x=x: x
x = 7
b = lambda: x
return a,b
aa, bb = foo(4)
aa() # Prints 4
bb() # Prints 7
Où avez-vous vu la phrase utilisée?
"Reliure" En Python, on entend généralement le processus par lequel un nom de variable finit par pointer vers un objet spécifique, que ce soit par affectation, transmission de paramètre ou par un autre moyen, par exemple:
.a = dict(foo="bar", zip="zap", zig="zag") # binds a to a newly-created dict object
b = a # binds b to that same dictionary
def crunch(param):
print param
crunch(a) # binds the parameter "param" in the function crunch to that same dict again
Donc, je suppose que "lambda binding" fait référence au processus de liaison d'une fonction lambda à un nom de variable, ou peut-être de lier ses paramètres nommés à des objets spécifiques? Il existe une assez bonne explication de la liaison dans la référence du langage, à l'adresse http://docs.python.org /ref/naming.html