In Python 2.6 möchte ich Folgendes tun:
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
Dies ist eindeutig nicht die Syntax. Ist es möglich, ein if
In durchzuführen lambda
und wenn ja, wie?
Vielen Dank
python
lambda
python-2.6
Kerl
quelle
quelle
Antworten:
Die Syntax, nach der Sie suchen:
Aber Sie können nicht
print
oderraise
in einem Lambda verwenden.quelle
if
ein Lambda?" nicht "Was ist der beste Weg, um ein Lambda zu schreiben, das True zurückgibt, wenn eine Zahl gerade ist?"Warum definieren Sie nicht einfach eine Funktion?
In diesem Fall gibt es wirklich keine Rechtfertigung für die Verwendung von Lambda.
quelle
print
ist noch keine Funktion in 2.6. :)def
- ist im Allgemeinen eine sehr schlechte Idee (tm). Verwenden Sie einfach einendef
so sterblichen Programmierer, der ihn lesen, interpretieren, verstehen und pflegen kann.Wahrscheinlich die schlechteste Python-Zeile, die ich bisher geschrieben habe:
Wenn Sie x == 2 drucken,
wenn x! = 2, erhöhen Sie.
quelle
Sie können leicht eine Ausnahme in einem Lambda auslösen, wenn Sie dies wirklich tun möchten.
Ist das eine gute Idee? Mein Instinkt im Allgemeinen ist es, die Fehlerberichterstattung aus Lambdas herauszulassen; Lassen Sie es den Wert None haben und lösen Sie den Fehler im Aufrufer aus. Ich denke jedoch nicht, dass dies von Natur aus böse ist - ich halte die Syntax "y if x else z" selbst für schlechter - stellen Sie nur sicher, dass Sie nicht versuchen, zu viel in einen Lambda-Körper zu stopfen.
quelle
x = RaiseValueErrorOnNone(x)
wiederum je nach Fall.Lambdas in Python sind ziemlich restriktiv in Bezug auf das, was Sie verwenden dürfen. Insbesondere können Sie keine Schlüsselwörter haben ( mit Ausnahme von Operatoren wie
and
,not
,or
usw.) in ihrem Körper.Es gibt also keine Möglichkeit, ein Lambda für Ihr Beispiel zu verwenden (weil Sie es nicht verwenden können
raise
), aber wenn Sie bereit sind, dies zuzugeben, können Sie Folgendes verwenden:quelle
Beachten Sie, dass Sie mehrere andere ... if- Anweisungen in Ihrer Lambda-Definition verwenden können:
quelle
Wenn Sie noch drucken möchten, können Sie das zukünftige Modul importieren
quelle
Sie können auch logische Operatoren verwenden, um so etwas wie eine Bedingung zu haben
Weitere Informationen zu logischen Operatoren finden Sie hier
quelle
if
Syntax immer dieser vorgezogen. Die offensichtliche Art, Bedingungen zu überprüfen.if
Aussage verwenden kann, daher fand ich diesen nicht offensichtlichen Weg.was du genau brauchst ist
Rufen Sie nun die Funktion so auf, wie Sie es benötigen
quelle
Dieses Snippet soll Ihnen helfen:
quelle
Der folgende Beispielcode funktioniert bei mir. Ich bin mir nicht sicher, ob es direkt mit dieser Frage zusammenhängt, hoffe aber, dass es in einigen anderen Fällen hilft.
quelle
Versuch es:
Aus:
quelle
Eine einfache Möglichkeit, ein If in Lambda durchzuführen, ist die Verwendung des Listenverständnisses.
Sie können in Lambda keine Ausnahme auslösen, aber in Python 3.x können Sie auf diese Weise etwas tun, das Ihrem Beispiel nahe kommt:
Ein anderes Beispiel:
1 zurückgeben, wenn M sonst 0
quelle