Ich habe den folgenden Code
num1 = 10
someBoolValue = True
Ich brauche den Wert einstellen num1
zu , 20
wenn someBoolValue
ist True
; und nichts anderes tun. Also, hier ist mein Code dafür
num1 = 20 if someBoolValue else num1
Gibt es eine Möglichkeit, das ...else num1
Teil zu vermeiden , damit es sauberer aussieht? Ein Äquivalent zu
if someBoolValue:
num1 = 20
Ich habe versucht, es ...else pass
wie folgt zu ersetzen : num1=20 if someBoolValue else pass
. Ich bekam nur einen Syntaxfehler. Ich konnte den ...else num1
Teil auch nicht einfach weglassen .
python
if-statement
bdhar
quelle
quelle
num1 = 20 if someBoolValue else 10
. Dann speichern Sie auch dienum1=10
Zeile?num1
es das schon gibt ...Antworten:
Ich denke nicht, dass dies in Python möglich ist, da das, was Sie tatsächlich versuchen, wahrscheinlich auf Folgendes erweitert wird:
Wenn Sie ausschließen
else num1
, erhalten Sie einen Syntaxfehler, da ich ziemlich sicher bin, dass die Zuweisung tatsächlich etwas zurückgeben muss.Wie andere bereits erwähnt haben, könnten Sie dies tun, aber es ist schlecht, weil Sie sich beim nächsten Lesen dieses Codes wahrscheinlich nur verwirren werden:
Ich bin
num1 = someBoolValue and 20 or num1
aus genau dem gleichen Grund kein großer Fan von . Ich muss tatsächlich zweimal darüber nachdenken, was diese Linie tut.Der beste Weg, um tatsächlich das zu erreichen, was Sie tun möchten, ist die Originalversion:
Der Grund, warum dies die beste Version ist, ist, dass es sehr offensichtlich ist, was Sie tun möchten, und Sie werden sich nicht verwirren oder wer auch immer später mit diesem Code in Kontakt kommen wird.
Als Randnotiz
num1 = 20 if someBoolValue
gilt auch gültiger Ruby-Code, da Ruby etwas anders funktioniert.quelle
num1 = (20 if someBoolValue else num1)
.Benutze das:
quelle
In einer Zeile:
Aber tu das nicht. Dieser Stil wird normalerweise nicht erwartet. Menschen bevorzugen die längere Form für Klarheit und Konsistenz.
(Ebenso sollten Kamelkappen vermieden werden. Also lieber verwenden
some_bool_value
.)Beachten Sie, dass ein Inline- Ausdruck
some_value if predicate
ohneelse
Teil nicht vorhanden ist, da es keinen Rückgabewert geben würde, wenn das Prädikat falsch wäre. Ausdrücke müssen jedoch in jedem Fall einen klar definierten Rückgabewert haben. Dies unterscheidet sich von der Verwendung wie beispielsweise in Ruby oder Perl.quelle
Sie können eine der folgenden Optionen verwenden:
quelle
True
/ zurückgebenFalse
, dabool
es sich um eine Unterklasse von handeltint
. In allen Fällen, in denen der Test etwas zurückgibt, das nur als wahr ausgewertet wird, schlägt er mit einer Ausnahme fehl. Zweitens funktioniert man nur so lange, wie estrueVal
selbst nicht falsch bewertet, was dazu führen würde, dassfalseVal
es zugewiesen wird, selbst wenn der Test wahr wäre.Ich denke, Sie hatten gehofft, dass so etwas
num1 = 20 if someBoolValue
funktionieren würde, aber das tut es nicht. Ich denke, der beste Weg ist mit derif
Aussage, wie Sie sie geschrieben haben:quelle
Das ist meine neue endgültige Antwort. Die vorherige Antwort lautete 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ürTrue
cond und eine andere für hinzufügen möchtenFalse
:Sie
num1
haben bereits einen Wert erwähnt, der in Ruhe gelassen werden sollte. Ich habe angenommen,num1 = 10
da dies die erste Aussage des Beitrags ist, ist die Operation, zu der man gelangen muss,20
das Hinzufügen10
.produzierte diese Ausgabe
quelle
quelle
Wenn Sie eine Methode aufrufen möchten, wenn ein Boolescher
else None
Wert wahr ist, können Sie das Trinary beenden.quelle
Wenn eine Zeile Code wird auf jeden Fall für Sie passieren wird, Python 3.8 einleitet Zuweisungsausdrücke als „Walross Operator“ liebevoll genannt.
Das
20
wird zugewiesen,num
wenn der erste boolesche Ausdruck istTrue
. Die Zuweisung muss hier in Klammern stehen, sonst wird ein Syntaxfehler angezeigt.quelle
Für den zukünftigen Zeitreisenden von Google gibt es hier einen neuen Weg (verfügbar ab Python 3.8):
quelle
Sie können definitiv num1 = (20, wenn someBoolValue sonst num1) verwenden, wenn Sie möchten.
quelle
Folgendes kann ich vorschlagen. Verwenden Sie eine andere Variable, um die if-Klausel abzuleiten und num1 zuzuweisen.
Code:
quelle
Ein anderer Weg
num1 = (20*boolVar)+(num1*(not boolVar))
quelle
Sie können es so machen.
Sie können Ihr Problem auf diese Weise lösen, aber die Verwendung von 'try / Except Block' ist nicht die beste Vorgehensweise für Python.
quelle