512 Stimmen

Gibt es eine Möglichkeit, "if" in Pythons Lambda auszuführen?

Python 2.6 möchte ich tun:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

Das ist eindeutig nicht die Syntax. Ist es möglich, eine if en lambda und wenn ja, wie kann man das tun?

3 Stimmen

In einem Lambda kann man nicht drucken oder erhöhen. Lambdas sind nur Funktionen, Sie können stattdessen immer eine Funktion verwenden.

11 Stimmen

Ich bin anderer Meinung als Sie. Ich brauche 4 verschiedene, sehr kurze Funktionen wie die oben genannten, die in eine Liste/Wörterbuch gesetzt werden müssen, so dass ich über sie iterieren kann und auswählen, welche in jeder Iteration zu verwenden. Anstelle von vielen Zeilen Code von nur inits, vor der Iteration, selbst kann ich es auf nur 4 Zeilen von Init-Code zu bringen. Je weniger, desto besser

6 Stimmen

4 Zeilen Code sind keine lobenswerte Lösung, wenn andere Leute den Code lesen, interpretieren, verstehen und pflegen müssen. Außerdem zeigt das "print/raise"-Problem in dem Beispiel, dass dies in Lambdas nicht möglich ist und auch nicht sein sollte.

16voto

David Wolever Punkte 138377

Lambdas in Python sind ziemlich restriktiv in Bezug auf das, was Sie verwenden dürfen. Insbesondere können Sie keine Schlüsselwörter verwenden (außer für Operatoren wie and , not , or usw.) in ihrem Körper.

Es gibt also keine Möglichkeit, ein Lambda für Ihr Beispiel zu verwenden (denn Sie können nicht mit raise ), aber wenn du bereit bist, das zuzugeben Du könntest es benutzen:

f = lambda x: x == 2 and x or None

5voto

Dieses Snippet sollte Ihnen helfen:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

3voto

Wenn Sie trotzdem drucken möchten, können Sie das Modul future importieren

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

2voto

Victor Lucas Punkte 58

Sie können auch logische Operatoren verwenden, um so etwas wie eine bedingte

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

Mehr über logische Operatoren erfahren Sie ici

2voto

abhi Punkte 55

Die Lösung für das gegebene Szenario ist:

f = lambda x : x if x == 2 else print("number is not 2")
f(30)  # number is not 2
f(2)   #2

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X