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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top