Pourquoi ça ne marche pas?
lambda: print "x"
N'est-ce pas une seule déclaration ou est-ce autre chose? La documentation semble un peu clairsemée sur ce qui est autorisé dans un lambda ...
python
printing
lambda
python-2.x
Anycorn
la source
la source
Réponses:
Le
lambda
corps de A doit être une seule expression . En Python 2.x,print
est une déclaration. Cependant, dans Python 3,print
est une fonction (et une application de fonction est une expression, donc cela fonctionnera dans un lambda). Vous pouvez (et devriez, pour la compatibilité ascendante :) utiliser la fonction d'impression rétroportée si vous utilisez la dernière version de Python 2.x:la source
from __future__ import print_function
être au début du code? thxprint()
comme méthode intégrée.Dans les cas où j'utilise ceci pour un simple stubbing, j'utilise ceci:
qui fonctionne parfaitement.
la source
ce que tu as écrit équivaut à
ce qui entraîne également une SyntaxError, python ne vous permet pas d'attribuer une valeur à imprimer dans 2.xx; en python3 vous pourriez dire
et cela fonctionnerait parce qu'ils ont changé print pour être une fonction au lieu d'une instruction.
la source
from __future__ import print_function
, ce qui permet cela dans py2.xlambda: sys.stdout.write('hi')
Le corps d'un lambda doit être une expression qui renvoie une valeur.
print
, étant une déclaration, ne renvoie rien, même pasNone
. De même, vous ne pouvez pas affecter le résultat deprint
à une variable:Vous ne pouvez pas non plus placer une affectation de variable dans un lambda, car les affectations sont des instructions:
la source
Vous pouvez faire quelque chose comme ça.
Créez une fonction pour transformer l'instruction d'impression en fonction:
Et imprimez-le:
la source
def printf(fmt, *args): print(fmt % args)
Avec Python 3.x, print CAN fonctionne dans un lambda, sans changer la sémantique du lambda.
Utilisé d'une manière spéciale, c'est très pratique pour le débogage. Je poste cette «réponse tardive», car c'est une astuce pratique que j'utilise souvent.
Supposons que votre lambda `` non instrumenté '' soit:
Alors votre lambda `` instrumenté '' est:
la source
Le corps d'un lambda doit être une seule expression .
print
est une déclaration, donc c'est sorti, malheureusement.la source
Ici , vous voyez une réponse à votre question.
print
n'est pas une expression en Python, dit-il.la source