Precyzyjna odpowiedź: Nie. Python nie posiada jeden wbudowany operatora op, który może przełożyć x = x or ysię x op y.
Ale prawie tak. Operator bitowy lub równości ( |=) będzie działał w sposób opisany powyżej, jeśli oba operandy są traktowane jako wartości logiczne, z zastrzeżeniem. (Jakie jest zastrzeżenie? Odpowiedź jest oczywiście poniżej.)
Najpierw podstawowa demonstracja funkcjonalności:
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
Zastrzeżenie jest spowodowane tym, że Python nie jest ściśle wpisywany, a zatem nawet jeśli wartości są traktowane jako wartości logiczne w wyrażeniu, nie zostaną zwarte, jeśli zostaną podane operatorowi bitowemu. Na przykład załóżmy, że mamy funkcję boolowską, która czyści listę i zwraca, Truejeśli zostały usunięte elementy:
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
Teraz możemy zobaczyć zachowanie związane ze zwarciem w następujący sposób:
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
Jednak przełączenie na orbitowe lub ( |) usuwa zwarcie, więc funkcja jest my_clear_listwykonywana.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Powyżej x = x | my_clear_list(lst)jest równoważne z x |= my_clear_list(lst).