Präzise Antwort: Nein. Python verfügt nicht über einen einzigen integrierten Operator op, in den übersetzt x = x or ywerden 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, Truewenn 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 orauf bitweise oder ( |) umschalten , wird der Kurzschluss behoben, sodass die Funktion my_clear_listausgefü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).