python short-circuiting

¿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.