7948 Stimmen

Verfügt Python über einen ternären bedingten Operator?

Wenn Python keine ternärer Konditionaloperator Ist es möglich, andere Sprachkonstrukte zu verwenden, um eine solche zu simulieren?

4 Stimmen

Obwohl Pythons, die älter als 2.5 sind, langsam der Vergangenheit angehören, gibt es hier eine Liste alter ternärer Operator-Tricks aus der Zeit vor 2.5: "Python Idioms", Suche nach dem Text 'Conditional expression' (Bedingter Ausdruck) . Wikipedia ist auch sehr hilfreich :-)

212 Stimmen

In der offiziellen Dokumentation zu Python 3.0, auf die in einem Kommentar oben verwiesen wird, wird dies als "conditional_expressions" bezeichnet und ist sehr kryptisch definiert. Diese Dokumentation enthält nicht einmal den Begriff "ternär", so dass man nur schwerlich über Google danach suchen kann, wenn man nicht genau weiß, wonach man suchen muss. Die Version 2 Dokumentation ist etwas hilfreicher und enthält einen Link zu "PEP 308" die eine Menge interessanter historischer Zusammenhänge zu dieser Frage enthält.

48 Stimmen

"ternär" (mit drei Eingängen) ist eine Folgeeigenschaft dieser Aufteilung, keine definierende Eigenschaft des Konzepts. z.B.: SQL hat case [...] { when ... then ...} [ else ... ] end für eine ähnliche Wirkung, aber keineswegs ternär.

4voto

Es gibt mehrere Möglichkeiten. Die einfachste ist die Verwendung der Bedingung innerhalb der "print"-Methode.

Sie können verwenden

print("Twenty" if number == 20 else "Not twenty")

Das ist gleichbedeutend mit:

if number == 20:
    print("Twenty")
else:
    print("Not twenty")

Auf diese Weise lassen sich auch mehr als zwei Anweisungen ausdrucken. Zum Beispiel:

if number == 20:
    print("Twenty")
elif number < 20:
    print("Lesser")
elif 30 > number > 20:
    print("Between")
else:
    print("Greater")

kann geschrieben werden als:

print("Twenty" if number == 20 else "Lesser" if number < 20 else "Between" if 30 > number > 20 else "Greater")

3voto

DevLoverUmar Punkte 7868

Le site wenn sonst-wenn Version kann wie folgt geschrieben werden:

sample_set="train" if "Train" in full_path else ("test" if "Test" in full_path else "validation")

3voto

Ja, das hat sie, aber sie unterscheidet sich von C-Syntax-ähnlichen Programmiersprachen (die condition ? value_if_true : value_if_false

In Python geht das folgendermaßen: value_if_true if condition else value_if_false

Beispiel: even_or_odd = "even" if x % 2 == 0 else "odd"

1voto

Yaakov Bressler Punkte 5963

Eine gute Möglichkeit, mehrere Operatoren zu verketten:

f = lambda x,y: 'greater' if x > y else 'less' if y > x else 'equal'

array = [(0,0),(0,1),(1,0),(1,1)]

for a in array:
  x, y = a[0], a[1]
  print(f(x,y))

# Output is:
#   equal,
#   less,
#   greater,
#   equal

1voto

Baruc Almaguer Punkte 102

Ich finde die Standard-Python-Syntax val = a if cond else b umständlich, deshalb mache ich das manchmal:

iif = lambda (cond, a, b): a if cond else b
# So I can then use it like:
val = iif(cond, a, b)

Das hat natürlich den Nachteil, dass immer beide Seiten bewertet werden ( a et b ), aber die Syntax ist für mich viel klarer.

5 Stimmen

Dies scheint doppelt so viel Arbeit zu sein, mehr RAM zu verbrauchen und mehr zu verschleiern als die einfachere val = a if cond else b Erklärung.

0 Stimmen

Auch beide a y b werden hier jedes Mal ausgewertet, anders als in a if cond else b

0 Stimmen

Laut PEP8 ist die Zuweisung eines Lambda an eine Variable ein Codegeruch. Lambda sollte nur als Inplace-Funktion verwendet werden.

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