D'une manière générale, le symbole ^
es un infixe de la version __xor__
o __rxor__
des méthodes. Les types de données placés à droite et à gauche du symbole doivent implémenter cette fonction de manière compatible. Pour les entiers, il s'agit de la fonction commune XOR
mais, par exemple, il n'existe pas de définition intégrée de la fonction pour le type float
avec type int
:
In [12]: 3 ^ 4
Out[12]: 7
In [13]: 3.3 ^ 4
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-858cc886783d> in <module>()
----> 1 3.3 ^ 4
TypeError: unsupported operand type(s) for ^: 'float' and 'int'
Ce qui est intéressant avec Python, c'est que vous pouvez remplacer ce comportement dans une classe de votre choix. Par exemple, dans certains langages, la classe ^
signifie exponentiation. Vous pouvez le faire de cette manière, à titre d'exemple :
class Foo(float):
def __xor__(self, other):
return self ** other
Alors, quelque chose comme ceci fonctionnera, et maintenant, pour les instances de Foo
seulement , le ^
signifie qu'il s'agit d'une exponentiation.
In [16]: x = Foo(3)
In [17]: x
Out[17]: 3.0
In [18]: x ^ 4
Out[18]: 81.0
4 votes
Pour les entiers, c'est la même chose qu'en C. ^_-
38 votes
Pour information, à partir du shell python, vous pouvez taper
help('^')
1 votes
-1 : Cette question est entièrement traitée dans la documentation Python et dans la fonction d'aide incluse. Poser cette question ici est stupide.
8 votes
Notez qu'il ne se comporte pas bizarrement pour les flottants (il ne fonctionne tout simplement pas avec les flottants !). Notez également que de nombreuses personnes tombent accidentellement sur ce problème alors qu'elles recherchent
**
l'opérateur d'exponentiation.3 votes
@seth :
help('^')
ne fait rien dans mon Python 2.6.1 (apple build). @S.Lott : voulez-vous dire ceci ( docs.python.org/reference/ ) quand vous dites "complètement couvert" ? Cela semble un peu court pour quelqu'un qui n'est pas familier avec le concept...0 votes
@Mike Graham : c'est en fait de là qu'il vient. J'ai vu l'opérateur ** et je me suis demandé ce que faisait caret, et nous y voilà :)
0 votes
@ChristopheD, Non, il ne parlait pas de cette page, qui traite de l'analyse Python, et non de la sémantique de ce que l'on veut faire.
^
ne.help('^')
dans l'interprète interactif debe consulter l'aide expliquant les opérateurs arithmétiques, qui n'aurait fourni que le nom "bitwise XOR", ce qui aurait été suffisant pour continuer.2 votes
J'ai essayé dans mon interpréteur (2.5.4) et j'ai obtenu : >>> help('^') pas de documentation Python trouvée pour '^'