Respuesta precisa: No. Python no tiene un solo operador incorporado op
que pueda traducirse x = x or y
en x op y
.
Pero casi lo hace. El bit a bit o es igual operador ( |=
) voluntad función como se describe anteriormente si ambos operandos están siendo tratados como booleanos, con una advertencia. (¿Cuál es la advertencia? La respuesta está a continuación, por supuesto).
Primero, la demostración básica de funcionalidad:
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
La advertencia es que Python no se escribe estrictamente y, por lo tanto, incluso si los valores se tratan como booleanos en una expresión, no se cortocircuitarán si se les da a un operador bit a bit. Por ejemplo, supongamos que tenemos una función booleana que borra una lista y devuelve True
si hay elementos eliminados:
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
Ahora podemos ver el comportamiento en cortocircuito así:
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
Sin embargo, cambiar or
a bit a bit o ( |
) elimina el cortocircuito, por lo que la función se my_clear_list
ejecuta.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Arriba, x = x | my_clear_list(lst)
es equivalente a x |= my_clear_list(lst)
.