Encontrei o operador circunflexo em python hoje e, ao experimentá-lo, obtive a seguinte saída:
>>> 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 ser baseado em 8, então estou supondo que algum tipo de operação de byte? Não consigo encontrar muito sobre esses sites de busca, exceto se ele se comporta de forma estranha para flutuadores, alguém tem um link para o que este operador faz ou você pode explicar isso aqui?
help('^')
**
o operador de exponenciação.help('^')
não faz nada no meu Python 2.6.1 (compilação da apple). @ S.Lott: você quer dizer isso ( docs.python.org/reference/… ) quando está dizendo "completamente coberto"? Parece um pouco esparso para quem não está familiarizado com o conceito ...Respostas:
É um XOR bit a bit (OU exclusivo).
Resulta verdadeiro se um (e apenas um) dos operandos (avalia como) verdadeiro.
Para demonstrar:
Para explicar um de seus próprios exemplos:
Pense nisso desta maneira:
fonte
1
no mesmo bit para deixar isso claro1 xor 1 = 0
.0bX
onde X é o seu binário.0b0001
,0b0010
etc. Então,0b1101 ^ 0b1110
daria a você0b0011
(ou 3).Ele invoca o método
__xor__()
ou__rxor__()
do objeto conforme necessário, que para tipos inteiros faz um ou exclusivo bit a bit.fonte
É um pouco exclusivo - ou. Operadores binários bit a bit são documentados no capítulo 5 da Referência de linguagem Python .
fonte
De um modo geral, o símbolo
^
é uma versão infixa dos métodos__xor__
ou__rxor__
. Quaisquer tipos de dados colocados à direita e à esquerda do símbolo devem implementar essa função de maneira compatível. Para inteiros, é aXOR
operação comum , mas por exemplo não há uma definição embutida da função para tipofloat
com tipoint
:Uma coisa legal sobre Python é que você pode sobrescrever esse comportamento em uma classe própria. Por exemplo, em alguns idiomas, o
^
símbolo significa exponenciação. Você poderia fazer isso desta forma, apenas como um exemplo:Em seguida, algo como isso vai funcionar, e agora, para instâncias de
Foo
única , o^
símbolo significa exponenciação.fonte
+
operador funciona também?+
símbolo é capaz de fazer um tipo de ação paralist
(concatenação) enquanto executa outro tipo de ação (adição matemática) para tipos numéricos. Nesse caso, você substituiria os métodos__add__
ou__radd__
em sua classe.__r*__
versão destes (como__rxor__
ou__radd__
) será invocada a partir do argumento que aparece no lado direito do símbolo do infixo, e apenas se a chamada para a função do símbolo do lado esquerdo não funcionar. Você pode pensar nisso comotry: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol)
, masxor
pode ser substituído por qualquer um dos operadores infixos disponíveis no Modelo de Dados Python .int
concatenação com strings? cara, python é muito mais complexo do que eu pensava(CompositionA | CompositionB) // CompositionC
e isso significaria apenas "Toque a composição A seguida pela composição B, enquanto isso, também toque a composição C ao mesmo tempo em paralelo." Fale sobre um belo trecho de código!Quando você usa o
^
operador, nos bastidores, o método__xor__
é chamado.a^b
é equivalente aa.__xor__(b)
.Além disso,
a ^= b
é equivalente aa = a.__ixor__(b)
(onde__xor__
é usado como substituto quando__ixor__
é implicitamente chamado por meio de^=
mas não existe).Em princípio,
__xor__
depende totalmente de sua implementação. Casos de uso comuns em Python são:Demo:
Demo:
Explicação:
fonte