Quel est le signe de l'opérateur (^) en Python faire?
J'ai couru à travers le signe de l'opérateur en python, aujourd'hui, et en l'essayant, j'ai obtenu le résultat suivant:
>>> 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
>>>
Il semble être basé sur 8, donc je suppose une sorte de byte opération? Je n'arrive pas à trouver grand chose sur cette recherche des sites autres qu'il se comporte bizarrement pour des flotteurs, quelqu'un a un lien pour ce que cet opérateur ne ou pouvez-vous expliquer ici?
- Pour les entiers, même chose qu'il fait en C. ^_-
- Pour info, à partir de l'interface python, vous pouvez taper
help('^')
- -1: C'est complètement couvert dans la documentation Python et à la fonction d'aide. Poser cette question ici est idiot.
- Notez qu'il ne veut pas se comporter de façon étrange pour des flotteurs (il ne fonctionne tout simplement pas avec des chars!). Notez également que de nombreuses personnes accidentellement couru dans cette tout en regardant pour
**
, l'opérateur exponentiel. help('^')
ne fait rien dans mon Python 2.6.1 (apple construire). @S. Lott: entendez-vous ce (docs.python.org/reference/...) quand vous êtes en train de dire "complètement couvert"?. Semble un peu limité pour quelqu'un de familier avec le concept...- Merci à tous, je suppose que si je savais que c'était un opérateur au niveau du bit, je l'aurais su où chercher, mais je n'ai pas, d'où la question 🙂 Merci à tous pour vos réponses, elles ont toutes été utile et je sais maintenant un peu plus! 🙂
- Graham: c'est en fait d'où il vient. J'ai vu l' ** l'opérateur et de la pensée, eh bien, je me demande ce signe ne puis, et ici, nous sommes 🙂
- Non, il ne voulait pas dire que la page, qui est sur l'analyse de Python, il pas la sémantique de ce
^
n'.help('^')
dans interactive interpretter devrait tirer vers le haut à l'aide d'expliquer les opérateurs arithmétiques, ce qui aurait fourni le nom "XOR au niveau du bit", qui aurait été assez d'informations. - J'ai essayé ceci dans mon interprète (2.5.4) et a obtenu: >>> aide('^') n la documentation Python trouvé pour '^'
Vous devez vous connecter pour publier un commentaire.
C'est un bit à bit XOR (OU exclusif).
Le résultat est vrai si un (et un seul) des opérandes (donne) vrai.
À démontrer:
D'expliquer l'un de vos propres exemples:
Pensez-y de cette façon:
1
dans le même bit de préciser que1 xor 1 = 0
.0bX
où X est votre binaire.0b0001
,0b0010
, etc. Donc,0b1101 ^ 0b1110
serait de vous donner0b0011
(ou 3).Il appelle la
__xor__()
ou__rxor__()
méthode de l'objet en tant que de besoin, ce qui pour les types integer fait un bit à bit ou exclusif.C'est un bit à bit ou exclusif. Binaire opérateurs au niveau du bit sont documentées dans le chapitre 5 de la Référence au Langage Python.
Généralement parlant, le symbole
^
est un infix version de la__xor__
ou__rxor__
méthodes. Quels que soient les types de données sont placés à droite et à gauche du symbole doit implémenter cette fonction dans des conditions de compatibilité. Pour les entiers, c'est la communeXOR
opération, mais par exemple il n'est pas intégré dans la définition de la fonction de type defloat
avec le typeint
:Une chose intéressante à propos de Python, c'est que vous pouvez remplacer ce comportement dans une classe de votre choix. Par exemple, dans certaines langues, le
^
symbole signifie que l'exponentiation. Vous pourriez le faire de cette façon, juste à titre d'exemple:Alors quelque chose de ce genre de travail, et maintenant, pour les instances de
Foo
seulement, le^
symbole signifie exponentiation.+
opérateur travaille trop?+
symbole est capable de faire un genre d'action pourlist
(concaténation) tout en faisant un autre type d'action (mathématique plus) pour les types numériques. Dans ce cas, vous devez substituer la__add__
ou__radd__
méthodes de votre classe.__r*__
version de ceux-ci (comme__rxor__
ou__radd__
) va être appelée à partir de l'argument figurant sur le droite de l'infixe symbole, et seulement si, l'appel à la fonction pour la main gauche symbole ne fonctionne pas. Vous pouvez penser à elle commetry: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol)
, maisxor
peut être remplacé par un des opérateurs infixes dans le Python, Modèle de Données.int
concaténation de chaînes? l'homme, python est une façon complexe que ce que je pensais|
, et le sol opérateur de division,//
, pour dire "pipe" ou "parallèle" pour sa musique objets.(CompositionA | CompositionB) // CompositionC
et il serait juste de dire "Jouer de la composition d'Un suivi par la composition B, entre-temps aussi jouer de la composition C en même temps en parallèle." Parler d'un beau morceau de code!__xor__
méthode, mais de le faire pour de vrai serait une mauvaise pratique.Lorsque vous utilisez le
^
opérateur, derrière les rideaux de la méthode__xor__
est appelé.a^b
est équivalent àa.__xor__(b)
.Aussi,
a ^= b
est équivalent àa = a.__ixor__(b)
(où__xor__
est utilisé comme une solution de repli lorsque__ixor__
est implicitement appelée via l'aide de^=
mais n'existe pas).En principe, ce
__xor__
n'est complètement jusqu'à sa mise en œuvre. Cas d'utilisation courante en Python sont:Démo:
Démo:
Explication: