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 ...
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 ...
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:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
être au début du code? thx
print()
comme méthode intégrée.
Dans les cas où j'utilise ceci pour un simple stubbing, j'utilise ceci:
fn = lambda x: sys.stdout.write(str(x) + "\n")
qui fonctionne parfaitement.
ce que tu as écrit équivaut à
def anon():
return print "x"
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
lambda: print('hi')
et cela fonctionnerait parce qu'ils ont changé print pour être une fonction au lieu d'une instruction.
from __future__ import print_function
, ce qui permet cela dans py2.x
lambda: 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 pas None
. De même, vous ne pouvez pas affecter 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 un lambda, car les affectations sont des instructions:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Vous pouvez faire quelque chose comme ça.
Créez une fonction pour transformer l'instruction d'impression en fonction:
def printf(text):
print text
Et imprimez-le:
lambda: printf("Testing")
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:
lambda: 4
Alors votre lambda `` instrumenté '' est:
lambda: (print (3), 4) [1]
Ici , vous voyez une réponse à votre question. print
n'est pas une expression en Python, dit-il.