Me encontré con el operador de intercalación en python hoy y, al probarlo, obtuve el siguiente resultado:
>>> 8^3
11
>>> 8^4
12
>>> 8^1
9
>>> 8^0
8
>>> 7^1
6
>>> 7^2
5
>>> 7^7
0
>>> 7^8
15
>>> 9^1
8
>>> 16^1
17
>>> 15^1
14
>>>
Parece estar basado en 8, así que supongo que es algún tipo de operación de byte. Parece que no puedo encontrar mucho sobre estos sitios de búsqueda aparte de que se comporta de manera extraña para los flotadores, ¿alguien tiene un enlace a lo que hace este operador o puede explicarlo aquí?
help('^')
**
el operador de exponenciación.help('^')
no hace nada en mi Python 2.6.1 (compilación de Apple). @ S.Lott: ¿te refieres a esto ( docs.python.org/reference/… ) cuando dices "completamente cubierto" ?. Parece un poco escaso para alguien que no esté familiarizado con el concepto ...Respuestas:
Es un XOR bit a bit (OR exclusivo).
Resulta verdadero si uno (y solo uno) de los operandos (se evalúa como) verdadero.
Demostrar:
Para explicar uno de sus propios ejemplos:
Piensa en ello de esta manera:
fuente
1
en el mismo bit para dejarlo en claro1 xor 1 = 0
.0bX
donde X es tu binario.0b0001
,0b0010
, Etc Por lo tanto,0b1101 ^ 0b1110
sería darle0b0011
(o 3).Invoca el método
__xor__()
o__rxor__()
del objeto según sea necesario, que para los tipos enteros hace un exclusivo-or bit a bit.fuente
Es un poco exclusivo-o. Los operadores binarios bit a bit están documentados en el capítulo 5 de la Referencia del lenguaje Python .
fuente
En términos generales, el símbolo
^
es una versión infija de los métodos__xor__
o__rxor__
. Cualquier tipo de datos que se coloque a la derecha e izquierda del símbolo debe implementar esta función de una manera compatible. Para enteros, es laXOR
operación común , pero por ejemplo, no hay una definición incorporada de la función para el tipofloat
con tipoint
:Una cosa interesante de Python es que puede anular este comportamiento en una clase propia. Por ejemplo, en algunos idiomas, el
^
símbolo significa exponenciación. Puede hacerlo de esta manera, solo como un ejemplo:Entonces algo como esto va a funcionar, y ahora, para casos de
Foo
única , el^
símbolo significa exponenciación.fuente
+
que trabaja el operador?+
símbolo puede realizar un tipo de acción paralist
(concatenación) mientras realiza otro tipo de acción (suma matemática) para tipos numéricos. En ese caso, anularía los métodos__add__
o__radd__
en su clase.__r*__
versión de estos (como__rxor__
o__radd__
) se invocará desde el argumento que aparece en el lado derecho del símbolo de infijo, y solo si la llamada a la función para el símbolo de la mano izquierda no funciona. Puede pensar en ellotry: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol)
, peroxor
puede ser reemplazado por cualquiera de los operadores infijos disponibles en el modelo de datos de Python .int
concatenación con cadenas? hombre, Python es mucho más complejo de lo que pensaba(CompositionA | CompositionB) // CompositionC
y simplemente significaría "Reproducir la composición A seguida de la composición B, mientras tanto, también tocar la composición C al mismo tiempo en paralelo". ¡Habla de un hermoso código!Cuando usa el
^
operador, detrás de las cortinas__xor__
se llama al método .a^b
es equivalente aa.__xor__(b)
.Además,
a ^= b
es equivalente aa = a.__ixor__(b)
(donde__xor__
se usa como respaldo cuando__ixor__
se llama implícitamente mediante using^=
pero no existe).En principio, lo que
__xor__
hace depende completamente de su implementación. Los casos de uso comunes en Python son:Manifestación:
Manifestación:
Explicación:
fuente