2011-12-30 5 views
2

Possible en double:
What is a lambda and what is an example implementation?s'il vous plaît expliquer fonctionnement lambda

Voici le code pour un lambda (de l'octet de Python):

def make_repeater(n): 
    return lambda s: s * n 

twice = make_repeater(2) 

print twice('word') 
print twice(5) 

La sortie est cette :

wordword 
10 

Quelqu'un peut-il expliquer comment le lambda fonctionne en longform? comment sont word et 5 passés à s dans la fonction lambda?

merci.

+0

Bon travail posant une meilleure question que la question "duplication possible", mais la première réponse, il est assez génial. – sarnold

+1

Je pense que je vais obtenir une erreur de débordement de pile mentale de récursif en questions en double ... – FakeRainBrigand

+0

Voir [Understanding-lambda-fonctions en python] (http://stackoverflow.com/questions/17833228/understanding-lambda- fonctions? lq = 1) – nawfal

Répondre

4

Comme Jake l'a déjà indiqué, votre make_repeater renvoie une autre fonction avec n étant lié à 2 (cela s'appelle un closure). Donc, votre code est à peu près équivalent à:

twice = lambda s: s * 2 

print twice('word') 
print twice(5) 

Ce qui est à son tour à peu près équivalent à:

def twice(s): 
    return s * 2 

print twice('word') 
print twice(5) 

Ce qui est à son tour à peu près équivalent à:

print 'word' * 2 
print 5 * 2 

Alors ce que vous faites est:

  • évaluer l'expression 'word' * 2, qui se traduit par 'wordword' (multiplication des chaînes est défini par Python répétant la chaîne le nombre de fois)
  • évaluer l'expression 5 * 2, qui se traduit par 10 (cela ne devrait pas vous surprendre)

Le fait que votre fonction lambda ne se soucie pas du type de son argument et décide de manière dynamique à l'exécution quelle méthode de multiplication est correcte, est appelé dynamic typing.

1

La fonction make_repeater renvoie une autre fonction (le lambda). Dans votre exemple, la fonction lambda reçoit le nom "deux fois". Le lambda a un argument, "s", et une valeur "statique", "n" - le "n" est défini quand le lambda est créé (dans ce cas, il est assigné à "2"). La valeur de "s" est déterminée lorsque le mot lambda est invoqué - soit "word" ou 5. mot * 2 = "wordword" et 5 * 2 = 10.

Questions connexes