¿Dónde se utilizan los caracteres de la barra comercial y la barra vertical en Python?
short-circuiting (3)
En la página de Wikipedia que describe la evaluación de cortocircuito , &
y |
se enumeran como operadores ansiosos en Python. ¿Qué significa esto y cuándo se usan en el idioma?
& ----> Se utiliza para AND bitwise, es decir, bit a bit
similar,
| ---> utilizado para OR bitwise
Cuando encuentre algún problema con Python, intente usar python.org, es útil
La página de wikipedia está mal, la he corregido. |
y &
no son operadores booleanos, aunque sean operadores ansiosos, lo que significa que no son operadores de cortocircuito. Como probablemente sepas, aquí está cómo funcionan los operadores python and
/ or
:
>>> def talk(x):
... print "Evaluating: ", bool(x)
... return x
...
>>> talk(1 == 1) or talk(2 == 1) # 2 == 1 is not evaluated
Evaluating: True
True
>>> talk(1 == 1) and talk(2 == 1)
Evaluating: True
Evaluating: False
False
>>> talk(1 == 2) and talk(1 == 3) # 1 == 3 is not evaluated
Evaluating: False
False
Que yo sepa, python no tiene operadores booleanos ansiosos, tendrían que ser codificados explícitamente, por ejemplo, como este:
>>> def eager_or(a, b):
... return a or b
...
>>> eager_or(talk(1 == 1), talk(2 == 1))
Evaluating: True
Evaluating: False
True
Ahora, a
y b
se evalúan automáticamente cuando se llama a la función, incluso aunque or
un cortocircuito.
En cuanto al uso de |
y &
, cuando se usan con números, son operadores binarios:
>>> bin(0b11110000 & 0b10101010)
''0b10100000''
>>> bin(0b11110000 | 0b10101010)
''0b11111010''
Es más probable que uses |
De esta manera, con enlaces de Python a bibliotecas que usan indicadores, como wxWidgets:
>>> frame = wx.Frame(title="My Frame", style=wx.MAXIMIZE | wx.STAY_ON_TOP)
>>> bin(wx.MAXIMIZE)
''0b10000000000000''
>>> bin(wx.STAY_ON_TOP)
''0b1000000000000000''
>>> bin(wx.MAXIMIZE | wx.STAY_ON_TOP)
''0b1010000000000000''
Cuando se usan con conjuntos, hacen las operaciones de intersección y unión , respectivamente:
>>> set("abcd") & set("cdef")
set([''c'', ''d''])
>>> set("abcd") | set("cdef")
set([''a'', ''c'', ''b'', ''e'', ''d'', ''f''])
Significa que el operando izquierdo y el operando derecho siempre se evalúan. &
es el operador bitwise y |
es el operador OR a nivel de bit.