it-swarm.com.de

Einzeilige if-Bedingung-Zuordnung

Ich habe den folgenden Code

num1 = 10
someBoolValue = True

Ich muss den Wert von num1 auf 20 setzen, wenn someBoolValueTrue ist. und nichts anderes tun. Also hier ist mein Code dafür

num1 = 20 if someBoolValue else num1

Gibt es eine Möglichkeit, den ...else num1-Teil zu vermeiden, damit er sauberer aussieht? Ein Äquivalent zu 

if someBoolValue:
    num1 = 20

Ich habe versucht, es durch ...else pass wie folgt zu ersetzen: num1=20 if someBoolValue else pass. Alles, was ich bekam, war ein Syntaxfehler. Ich könnte auch den ...else num1-Teil nicht einfach weglassen.

83
bdhar

Ich glaube nicht, dass dies in Python möglich ist, da das, was Sie tatsächlich zu tun versuchen, wahrscheinlich auf Folgendes erweitert wird:

num1 = 20 if someBoolValue else num1

Wenn Sie else num1 ausschließen, erhalten Sie einen Syntaxfehler, da ich mir ziemlich sicher bin, dass die Zuweisung tatsächlich etwas zurückgeben muss.

Wie andere bereits erwähnt haben, können Sie dies tun, aber es ist schlecht, weil Sie sich beim nächsten Lesen dieses Codes wahrscheinlich selbst verwirrt haben:

if someBoolValue: num1=20

Ich bin aus dem gleichen Grund kein großer Fan von num1 = someBoolValue and 20 or num1. Ich muss eigentlich zweimal darüber nachdenken, was diese Linie macht.

Der beste Weg, um wirklich zu erreichen, was Sie wollen, ist die Originalversion:

if someBoolValue:
    num1 = 20

Das ist der beste Grund, weil es sehr offensichtlich ist, was Sie tun möchten, und Sie sich nicht selbst verwirren, oder wer auch immer später mit diesem Code in Kontakt kommt.

Als Randbemerkung ist num1 = 20 if someBoolValue gültiger Ruby-Code, da Ruby etwas anders arbeitet.

133
Frost

Benutze das:

num1 = 20 if someBoolValue else num1
30
gigimon

In einer Zeile:

if someBoolValue: num1 = 20

Aber mach das nicht. Dieser Stil wird normalerweise nicht erwartet. Die Menschen bevorzugen die längere Form aus Gründen der Klarheit und Konsistenz.

if someBoolValue:
    num1 = 20

(Ebenso sollten Kamelkappen vermieden werden. Verwenden Sie also lieber some_bool_value.)

Beachten Sie, dass kein Inline Ausdruck some_value if predicate ohne else-Part existiert, da es keinen Rückgabewert geben würde, wenn das Prädikat falsch wäre. Ausdrücke müssen jedoch in allen Fällen einen klar definierten Rückgabewert haben. Dies unterscheidet sich von der Verwendung in Ruby oder Perl.

18
Debilski

sie können eine der folgenden verwenden:

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal
11
kerwal

Ich denke, Sie hatten gehofft, dass etwas wie num1 = 20 if someBoolValue funktionieren würde, aber es funktioniert nicht. Ich denke, der beste Weg ist mit der if-Anweisung, wie Sie sie geschrieben haben:

if someBoolValue:
    num1 = 20
5
Mark Byers
num1 = 10 + 10*(someBoolValue == True)

Das ist meine neue endgültige Antwort ... Die vorherige Antwort war wie folgt und war für das angegebene Problem übertrieben. Getting_too_clever == not Good. Hier ist die vorherige Antwort ... immer noch gut, wenn Sie eine Sache für True cond und eine andere für False hinzufügen möchten:

num1 = 10 + (0,10)[someBoolValue == True]

Sie sagten, num1 hätte bereits einen Wert, der in Ruhe gelassen werden sollte. Ich habe num1 = 10 angenommen, da dies die erste Anweisung des Beitrags ist. Daher müssen Sie 20 aufrufen, um auf 10 zuzugreifen.

num1 = 10
someBoolValue = True

num1 = 10 + (0,10)[someBoolValue == True]

print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')

produziert diese Ausgabe

num1 = 20
someBoolValue = True
3
MikeyB
num1 = 20 * someBoolValue or num1
1
kerwal

Wenn Sie eine Methode aufrufen möchten, wenn ein boolescher Wert wahr ist, können Sie else None eingeben, um das Trinary zu beenden.

>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>
0
soultech67

Ein anderer Weg num1 = (20*boolVar)+(num1*(not boolVar))

0

Hier ist, was ich vorschlagen kann. Verwenden Sie eine andere Variable, um die if-Klausel abzuleiten und num1 zuzuweisen.

Code:

num2 =20 if someBoolValue else num1
num1=num2
0
j raj

Sie können definitiv num1 = (20, wenn someBoolValue oder num1) verwenden, wenn Sie möchten.

0
Yaonan Qian