2010-10-14 17 views
41

Google no me deja buscar | = así que tengo problemas para encontrar documentación relevante. ¿Alguien sabe?¿Qué hace | = (ior) en Python?

+2

Creo que es relevante señalar, como en la respuesta de sunny a continuación, que '|' también se usa como el operador de conjunto de conjuntos – TallChuck

Respuesta

37

En Python, y en muchos otros lenguajes de programación, | es el bitwise-OR operation. |= es a | como += es a +.

+8

¿Podría darnos un ejemplo? – minerals

16

esto es sólo una operación OR entre la variable actual y la otra. Siendo T=True y F=False, ver la salida gráfica:

r s r|=s 
-------------- 
T T T 
T F T 
F T T 
F F F 

Por ejemplo:

>>> r=True 
>>> r|=False 
>>> r 
True 
>>> r=False 
>>> r|=False 
>>> r 
False 
>>> r|=True 
>>> r 
True 
+0

Esto da una especie de impresión deformada del operador; '|' es un operador bitwise-or para enteros, no específicamente un operador booleano, y para cualquier cosa que no sea 'bool's, en realidad no producirá salidas' True' o 'False'. 'bool' es una subclase de' int', y para ser agradable, lo sobrecargaron para 'bool' para seguir produciendo salidas' True'/'False', pero en la mayoría de los casos, las operaciones booleanas deberían hacerse con' o', no '|'. Los usos normales para '|' son bitwise-or, o set-union. Mejores ejemplos de uso serían algo como 'a = 0b1001; a | = 0b0010; print (bin (a)) 'que produce' 0b1011'. – ShadowRanger

18

Cuando se utiliza con conjuntos se realiza la operación de unión.

+1

Estaba leyendo un código y el '| =' se usó en el contexto establecido, y no fue hasta que cometí un error y me di cuenta de que esta respuesta estaba aquí también – TallChuck

3

|= realiza un inplace, bitwise OR operation y también se aplica a Python sets.

Por ejemplo, el union de dos conjuntos x y y comparten 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 asignado operación O
  2. una operación OR en el lugar
  3. inplace O operación a través del método especial

Consulte también section B.8 of Dive in Python 3 sobre métodos especiales de operadores de Python.


He aquí algunos ejemplos que comparan OR (|) y la inplace OR (|=) aplicada a los conjuntos:

>>> x = set("abc") 
>>> y = set("def") 

>>> # 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'} 

Aquí es un ejemplo de overloading the __ior__() method para iterar iterables en una clase base abstracta MutableSet. Véalo sub-clasificado y aplicado en R. Hettinger's OrderedSet recipe (see lines 3 and 10 respectively). Aquí hay un thread on Python-ideas sobre por qué usar |= para actualizar un conjunto.

0

Es a nivel de bits o. Digamos que tenemos 32 |= 10, las imágenes 32 y 10 son binarias.

32 = 10 0000 
10 = 00 1010 

Ahora porque | es o, haga un bitwise o en los dos números

es decir 1 o 0 -> 1, 0 o 0 -> 0.Continuar este abajo en la cadena

10 0000 | 00 1010 = 10 1010. 

Ahora cambia el binario en un número decimal, 10 1010 = 42.

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