Präzise Antwort: Nein. Python verfügt nicht über einen einzigen integrierten Operator op
, in den übersetzt x = x or y
werden kann x op y
.
Aber es tut es fast. Der bitweise oder gleich Operator ( |=
) wird wie oben beschrieben funktionieren , wenn beide Operanden als Boolesche Werte behandelt werden, mit einem Vorbehalt. (Was ist die Einschränkung? Die Antwort ist natürlich unten.)
Zunächst die grundlegende Demonstration der Funktionalität:
x = True
x
Out[141]: True
x |= True
x
Out[142]: True
x |= False
x
Out[143]: True
x &= False
x
Out[144]: False
x &= True
x
Out[145]: False
x |= False
x
Out[146]: False
x |= True
x
Out[147]: True
Die Einschränkung ist darauf zurückzuführen, dass Python nicht streng typisiert ist. Selbst wenn die Werte in einem Ausdruck als Boolesche Werte behandelt werden, werden sie nicht kurzgeschlossen, wenn sie einem bitweisen Operator zugewiesen werden. Angenommen, wir hatten eine boolesche Funktion, die eine Liste löscht und zurückgibt, True
wenn Elemente gelöscht wurden:
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
Jetzt können wir das kurzgeschlossene Verhalten so sehen:
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
Wenn Sie jedoch or
auf bitweise oder ( |
) umschalten , wird der Kurzschluss behoben, sodass die Funktion my_clear_list
ausgeführt wird.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Oben x = x | my_clear_list(lst)
ist äquivalent zu x |= my_clear_list(lst)
.