Ist dies in Python in einer Zeile möglich?
if <condition>:
myList.append('myString')
Ich habe den ternären Operator ausprobiert:
myList.append('myString' if <condition>)
aber meine IDE ( MyEclipse ) mochte es nicht, ohne eine else
.
Ist dies in Python in einer Zeile möglich?
if <condition>:
myList.append('myString')
Ich habe den ternären Operator ausprobiert:
myList.append('myString' if <condition>)
aber meine IDE ( MyEclipse ) mochte es nicht, ohne eine else
.
Antworten:
Ja, das können Sie tun:
<condition> and myList.append('myString')
Wenn dies <condition>
falsch ist, wird ein Kurzschluss ausgelöst und die rechte Seite wird nicht ausgewertet. Wenn dies <condition>
zutrifft, wird die rechte Seite ausgewertet und das Element angehängt.
Ich möchte nur darauf hinweisen, dass das oben Genannte nicht pythonisch ist, und es wäre wahrscheinlich am besten, dies zu schreiben, unabhängig davon:
if <condition>: myList.append('myString')
Demonstration:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
also auch nicht-pythonisch ...;)
x = object.get('attribute')
in diesem Fall
Der Grund, warum Sie in der Sprache die Syntax nicht verwenden können
variable = "something" if a_condition
ohne else
ist , dass in dem Fall , in dem a_condition == False
, variable
plötzlich nicht bekannt ist. Möglicherweise könnte dies standardmäßig der Fall sein None
, aber Python erfordert, dass alle Variablenzuweisungen tatsächlich zu expliziten Zuweisungen führen. Dies gilt auch für Fälle wie Ihren Funktionsaufruf, da der an die Funktion übergebene Wert genauso ausgewertet wird wie die RHS einer Zuweisungsanweisung.
Ebenso müssen alle return
s tatsächlich zurückkehren, auch wenn sie bedingte return
s sind. Z.B:
return variable if a_condition
ist nicht erlaubt, aber
return variable if a_condition else None
ist erlaubt, da das zweite Beispiel garantiert explizit etwas zurückgibt.
variable=None
ist. : D
continue if i == 0
in einer for-Schleife.
else pass?
else pass
funktioniert nicht, da der ternäre Ausdruck einen Wert zurückgeben sollte, an den übergeben werden kann return
. pass
ist kein gültiger return
Wert.
if a_condition: variable = "something"
und if a_condition: return variable
sind legal. Es handelt sich also im Wesentlichen um eine willkürliche syntaktische Wahl von Python.
if <condition>: myList.append('myString')
Ansonsten nein. Warum muss man es in eine Zeile setzen?
Beachten Sie, dass der "ternäre Operator" ein Operator ist . Wie jeder Operator muss er etwas zurückgeben . Wie können Sie also einen ternären Operator ohne die else
Klausel haben? Was soll es zurückgeben, wenn die Bedingung nicht wahr ist?
Sie fragen im Grunde nach einem do_thing() if <condition> else pass
Konstrukt (das wirft SyntaxError
, wenn es ausgeführt wird). Wie ich während der Recherche für (etwas) ähnliche Fragen herausgefunden habe, do_thing() if condition else None
ist es so nah wie möglich (was nur ein anderer Weg ist <condition> and do_thing()
). Um diese Idee und andere Antworten zusammenzufassen, haben Sie folgende Möglichkeiten:
if <condition>: myList.append('myString')
- scheint der am wenigsten "hackige" (und damit bevorzugte) Weg zu sein<condition> and myList.append('myString')
myList.append('myString') if <condition> else None
myList.extend(['myString'] if condition else [])
würde auch funktionieren, obwohl es mehr Arbeit ist als die anderen Lösungen.
Sie können so etwas tun:
myList.append('myString') if <condition> else False
oder
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
Aber wenn Sie nichts zuweisen, spielt das keine Rolle. Ich bin besorgt darüber, dass diese Person versucht, ein Listenverständnis mit ähnlicher Logik zu erreichen.
Ich würde dies nur tun, wenn ich optionale Elemente zu einer Liste hinzufügen möchte, die auf einer Bedingung basiert.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
Dadurch wird der Wert nur durch "Keine" ersetzt, wenn die Bedingung nicht erfüllt ist. Später wird die Liste ohne die Werte "Keine" neu definiert. Auf diese Weise behalten sie ihren Index bei, wenn die Bedingung erfüllt ist