Pourquoi ça ne marche pas ?
lambda: print "x"
Est-ce que ce n'est pas une déclaration unique, ou est-ce que c'est autre chose ? La documentation semble un peu maigre sur ce qui est autorisé dans un lambda...
Pourquoi ça ne marche pas ?
lambda: print "x"
Est-ce que ce n'est pas une déclaration unique, ou est-ce que c'est autre chose ? La documentation semble un peu maigre sur ce qui est autorisé dans un lambda...
A lambda
Le corps d'une personne doit être un expression unique . Dans Python 2.x, print
est une déclaration. Cependant, dans Python 3, print
est un fonction (et une application de fonction est une expression, donc elle fonctionnera dans un lambda). Vous pouvez (et devriez, par souci de compatibilité :) utiliser la fonction print rétro-portée si vous utilisez la dernière version de Python 2.x :
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
Je comprends maintenant pourquoi c'était si important d'en faire une fonction. Je voulais utiliser print comme un kwarg par défaut et ceci a réglé le problème. Merci.
Puis-je savoir pourquoi from __future__ import print_function
doit être au début du code ? thx
Ce que vous avez écrit est équivalent à
def anon():
return print "x"
ce qui entraîne également une SyntaxError, car python ne permet pas d'attribuer une valeur à print dans la version 2.xx ; dans python3, vous pourriez dire
lambda: print('hi')
et ça marcherait parce qu'ils ont changé print pour être une fonction au lieu d'une déclaration.
Le corps d'une lambda doit être une expression qui renvoie une valeur. print
qui est une déclaration, ne renvoie rien, pas même None
. De même, vous ne pouvez pas assigner le résultat de print
à une variable :
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Vous ne pouvez pas non plus placer une affectation de variable dans une lambda, puisque les affectations sont des déclarations :
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
docs.python.org/reference/expressions.html#lambda . On y lit "expression", qui est un lien vers une définition complète de toutes les expressions possibles. Comment cela peut-il être "clairsemé" ? Qu'est-ce qui est incorrect ou incomplet ?
3 votes
@Lott J'avais une mauvaise compréhension de ce qu'est une expression/déclaration et de la place de l'impression.