¿Qué hace | = (ior) en Python?

Google no me deja buscar | = por lo que tengo problemas para encontrar documentación relevante. Alguien sabe?

En Python, y muchos otros lenguajes de progtwigción, | es la operación bitwise-OR . |= es a | como += es a + , es decir, una combinación de operación y asignación.

var |= value es corto para var = var | value var = var | value

Cuando se usa con conjuntos, realiza una operación de unión.

Esta es solo una operación OR entre la variable actual y la otra. Siendo T=True y F=False , vea la salida gráficamente:

 rsr|=s -------------- TTT TFT FTT FFF 

Por ejemplo:

 >>> r=True >>> r|=False >>> r True >>> r=False >>> r|=False >>> r False >>> r|=True >>> r True 

|= realiza una operación in situ, bitwise OR y también realiza una operación de unión de conjuntos de Python .

Por ejemplo, la unión de dos conjuntos x y y comparte las siguientes expresiones equivalentes:

 >>> x = x | y # (1) >>> x |= y # (2) >>> x.__ior__(y) # (3) 

donde el valor final de x es equivalente ya sea por:

  1. una operación OR asignada
  2. una operación OR in situ
  3. Una operación in situ O a través de un método especial

Consulte también la sección B.8 de Dive in Python 3 sobre métodos especiales de los operadores Python.


Aquí hay algunos ejemplos que comparan OR ( | ) y el OR in situ ( |= ) aplicado a los conjuntos:

 >>> x = {"a", "b", "c"} >>> y = {"d", "e", "f"} >>> # OR, | >>> x | y {'a', 'b', 'c', 'd', 'e', 'f'} >>> x # `x` is unchanged {'a', 'b', 'c'} >>> # Inplace OR, |= >>> x |= y >>> x # `x` is reassigned {'a', 'b', 'c', 'd', 'e', 'f'} 

Este es un ejemplo de la sobrecarga del __ior__() para iterar iterables en una clase base abstracta MutableSet . Véalo también subclasificado y aplicado en la receta OrderedSet de Raymond Hettinger (vea las líneas 3 y 10 respectivamente) . Aquí hay un hilo en Python-ideas sobre por qué usar |= para actualizar un conjunto.

Realiza un OR binario binario de los lados izquierdo y derecho de la asignación, luego almacena el resultado en la variable de la izquierda.

http://docs.python.org/reference/expressions.html#binary-bitwise-operations

Es un bit o Digamos que tenemos 32 |= 10 , la imagen 32 y 10 es binaria.

 32 = 10 0000 10 = 00 1010 

Ahora porque | es o, haz un bit o en los dos números

es decir, 1 o 0 -> 1, 0 o 0 -> 0. Continúe esto abajo de la cadena

 10 0000 | 00 1010 = 10 1010. 

Ahora cambia el binario a un decimal, 10 1010 = 42.

Para | =, piense en los ejemplos conocidos, x +=5 . Significa x = x + 5, por lo tanto x = x + 5, si tenemos x |= 5 , significa x = x bitwiseor with 5 .

En Python, | = (ior) funciona como una operación de unión. como si x = 5 y x | = 5, entonces el valor primero se convertirá en valor binario, luego la operación de unión se realizará y obtendremos la respuesta 5.

Para dar un caso de uso (después de pasar tiempo con las otras respuestas):

 def has_some_property(item): fake_test_result = bool(item) return fake_rest_result def lmk(data): # let_me_know_if_at_least_one_succeeds at_least_one = False for item in data: at_least_one |= has_some_property(item) return at_least_one >>> lmk([False, False, False]) False >>> lmk([True, False, False]) True >>> lmk([False, True, False]) True 

Vea también las advertencias en esta respuesta.