Точну відповідь: Ні Python не має один вбудований оператор , opякий може вилитися x = x or yв x op y.
Але це майже так. Побітовое або оператор-одно ( |=) волі функцію , як описано вище , якщо обидва операнда розглядається як булеві, із застереженням. (Що застереження? Звичайно, відповідь нижче.)
По-перше, основна демонстрація функціональності:
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
Застереження полягає в тому, що python не є строго набраним, і, отже, навіть якщо значення обробляються як булеві значення у виразі, вони не будуть короткозамкнені, якщо їх передавати побітовому оператору. Наприклад, припустимо, у нас була логічна функція, яка очищає список і повертає, Trueякщо були видалені елементи:
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
Тепер ми можемо бачити короткозамкнену поведінку так:
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
Однак перемикання на orпобітове або ( |) усуває коротке замикання, тому функція my_clear_listвиконується.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Вище, x = x | my_clear_list(lst)еквівалентно x |= my_clear_list(lst).