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.

1voto

Was Sie genau brauchen, ist

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

Rufen Sie nun die Funktion so auf, wie Sie sie brauchen

f(2)
f(3)

1voto

Paul Cysne Punkte 61

Eine einfache Möglichkeit, ein if in Lambda auszuführen, ist die Verwendung des Listenverständnisses.

Sie können keine Ausnahme in Lambda auslösen, aber dies ist eine Möglichkeit in Python 3.x, um etwas Ähnliches wie Ihr Beispiel zu tun:

f = lambda x: print(x) if x==2 else print("exception")

Ein weiteres Beispiel:

Rückgabe 1 wenn M sonst 0

f = lambda x: 1 if x=="M" else 0

1voto

Nagesh Jayaram Punkte 19

Hier ist die Lösung, wenn Sie Python 3.x verwenden!

>>> f = lambda x: print(x) if x == 2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>>

0voto

Rahul Punkte 177

Der folgende Beispielcode funktioniert bei mir. Ich bin nicht sicher, ob es sich direkt auf diese Frage bezieht, aber ich hoffe, es hilft in anderen Fällen.

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

0voto

Anurag Bhakuni Punkte 2281

Ich hoffe, das hilft ein wenig

können Sie dieses Problem auf folgende Weise beheben

f = lambda x:  x==2   

if f(3):
  print("do logic")
else:
  print("another logic")

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