Les lambdas vous permettent de créer une nouvelle fonction sans nom avec moins d'arguments et d'appeler la fonction !
>>> def foobar(x,y,z):
... print "%d, %d, %d" % (x,y,z)
>>> foobar(1,2,3) # call normal function
>>> bind = lambda x: foobar(x, 10, 20) # bind 10 and 20 to foobar
>>> bind(1) # print 1, 10, 20
>>> bind = lambda: foobar(1,2,3) # bind all elements
>>> bind() # print 1, 2, 3
modifier
https://docs.python.org/2/library/functools.html#functools.partial
si vous envisagez d'utiliser la liaison d'arguments nommés dans l'appel de fonction, ceci est également applicable :
>>> from functools import partial
>>> barfoo = partial(foobar, x=10)
>>> barfoo(y=5,z=6)
21
Veuillez noter que si vous liez des arguments depuis la gauche, vous devez appeler les arguments par leur nom. Si vous liez les arguments par la droite, cela fonctionne comme prévu.
>>> barfoo(5,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foobar() got multiple values for keyword argument 'x'
>>> f = partial(foobar, z=20)
>>> f(1,1)
22
0 votes
J'ai enfin trouvé une version de cette question où les réponses acceptées et populaires sont toutes de l'ordre de
functools.partial
au lieu d'un hack de nested-lambda ou d'un abus de default-argument-binding. Dans les favoris.