Warum funktioniert das nicht?
lambda: print "x"
Ist das nicht eine einzige Aussage oder ist es etwas anderes? Die Dokumentation scheint ein wenig spärlich zu sein, was in einem Lambda erlaubt ist ...
python
printing
lambda
python-2.x
Anycorn
quelle
quelle
Antworten:
A
lambda
‚s Körper ein zu einzelnen Ausdruck . In Python 2.xprint
ist eine Anweisung. In Python 3print
handelt es sich jedoch um eine Funktion (und eine Funktionsanwendung ist ein Ausdruck, sodass sie in einem Lambda funktioniert). Sie können (und sollten aus Gründen der Vorwärtskompatibilität :) die rückportierte Druckfunktion verwenden, wenn Sie das neueste Python 2.x verwenden:quelle
from __future__ import print_function
am Anfang des Codes stehen muss? thxprint()
als eingebaute Methode.In Fällen, in denen ich dies zum einfachen Ausstechen verwende, verwende ich Folgendes:
das funktioniert perfekt.
quelle
Was Sie geschrieben haben, ist gleichbedeutend mit
was auch zu einem SyntaxError führt, lässt Python Sie keinen Wert zuweisen, der in 2.xx gedruckt werden soll; in python3 könnte man sagen
und es würde funktionieren, weil sie print so geändert haben, dass es eine Funktion anstelle einer Anweisung ist.
quelle
from __future__ import print_function
, was dies in py2.x ermöglichtlambda: sys.stdout.write('hi')
Der Körper eines Lambda muss ein Ausdruck sein, der einen Wert zurückgibt.
print
Als Aussage gibt es nichts zurück, nicht einmalNone
. Ebenso können Sie das Ergebnisprint
einer Variablen nicht zuordnen :Sie können auch keine Variablenzuweisung in ein Lambda einfügen, da Zuweisungen Anweisungen sind:
quelle
Sie können so etwas tun.
Erstellen Sie eine Funktion, um die print-Anweisung in eine Funktion umzuwandeln:
Und drucken Sie es aus:
quelle
def printf(fmt, *args): print(fmt % args)
Mit Python 3.x kann print CAN in einem Lambda funktionieren, ohne die Semantik des Lambda zu ändern.
In besonderer Weise verwendet, ist dies sehr praktisch zum Debuggen. Ich poste diese 'späte Antwort', weil es ein praktischer Trick ist, den ich oft benutze.
Angenommen, Ihr "nicht instrumentiertes" Lambda ist:
Dann ist Ihr "instrumentiertes" Lambda:
quelle
Der Körper eines Lambda muss ein einzelner Ausdruck sein .
print
ist eine Aussage, also ist es leider raus.quelle
Hier sehen Sie eine Antwort auf Ihre Frage.
print
ist kein Ausdruck in Python, heißt es.quelle