Python中的插入符号操作符(^)是做什么的?
我今天在python中遇到了插入符号操作符,并进行了尝试,得到了以下输出:Python中的插入符号操作符(^)是做什么的?,python,operators,caret,Python,Operators,Caret,我今天在python中遇到了插入符号操作符,并进行了尝试,得到了以下输出: >>> 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
>>> 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
>>>
它似乎是基于8,所以我猜是某种字节运算?我似乎找不到关于这个搜索站点的更多信息,除了它在浮动中的行为异常,有没有人链接到这个操作员的工作,或者你能在这里解释一下吗?这是一点一点的排他性的。二进制位运算符记录在中。它是位运算符(异或) 如果一个操作数(且只有一个)的计算结果为true,则结果为true 证明:
>>> 0^0
0
>>> 1^1
0
>>> 1^0
1
>>> 0^1
1
要解释您自己的一个示例:
>>> 8^3
11
这样想:
1000 # 8 (binary)
0011 # 3 (binary)
---- # APPLY XOR ('vertically')
1011 # result = 11 (binary)
1000#8(二进制)
0011#3(二进制)
----#应用异或(“垂直”)
1011#结果=11(二进制)
它根据需要调用对象的
\uuuuxor\uuuxor()
或\uuxor\uuxor()
方法,对于整数类型,该方法执行按位异或。一般来说,符号^
是\uuxor\uxor
或\uxor\ucode>方法的一个版本。符号左右两侧放置的任何数据类型都必须以兼容的方式实现此功能。对于整数,它是常见的异或运算,但例如,对于类型为int
的类型float
,没有内置函数定义:
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'
然后类似的东西会起作用,现在,仅对于Foo
的实例,^
符号将意味着求幂
In [16]: x = Foo(3)
In [17]: x
Out[17]: 3.0
In [18]: x ^ 4
Out[18]: 81.0
使用^
操作符时,在帘幕后面调用该方法
a^b
相当于a.\uuuxor\uuuu(b)
另外,a^=b
相当于a=a.\uuuuuuixor(b)
(其中\uuuuuuuuxor\uuuuxor
通过使用^=/code>隐式调用\uuuuuixor\uuuuuxor
时用作回退)
原则上,\uuuxor\uuxor
的功能完全取决于它的实现。Python中的常见用例有:
- 集合的对称差异(所有元素正好出现在两个集合中的一个集合中)
演示:
- 两个整数的位按位不相等
演示:
说明:
101 (5 decimal)
XOR 110 (6 decimal)
-------------------
011 (3 decimal)
对于整数,与它在C.^中所做的相同,在python shell中,您可以键入help('^')
注意,它对于浮点数的行为并不奇怪(它只是不适用于浮点数!)。还要注意的是,许多人在寻找求幂运算符时意外地遇到了这个问题。@seth:help('^')
在我的Python 2.6.1(apple build)中没有任何作用@洛特:你说的“完全覆盖”是指这个吗?。对于不熟悉这个概念的人来说似乎有点稀疏……我在我的解释器(2.5.4)中尝试了这个方法,得到了:>>>帮助(“^”)没有为“^”找到Python文档一个稍具说明性的示例可能包括两个在同一位中具有1
的数字,以明确1 xor 1=0
。我想补充的是,您可以通过键入0bX
来实现二进制数,其中X是二进制数0b0001
,0b0010
,等等。所以,0b1101^0b1110
会给你0b0011
(或3)。我认为“如果一个(且只有一个)操作数(计算结果)为真”,这是不准确的,这将是布尔xorwoah的定义,这是可能的吗?我们也可以改变+
操作符的工作方式吗?是的,+
符号在对数值类型执行另一种操作(数学加法)的同时,可以对列表执行一种操作(串联)。在这种情况下,您将重写类中的\uuuuu add\uuuuuuu
或\uuuu radd\uuuuu
方法。作为旁注,这些方法的\uuuuuu r*\uuuuuuuu
版本(如\uuuuuuuxor\ucode>或\uuu radd\uuuuu
)将从中缀符号右侧的参数调用,并且仅当对左手符号的函数的调用不起作用时。你可以把它想象成try:left\u hand\u symbol.\uuuuuxor\uuuuu(right\u hand\u symbol);除了:右侧符号。\ uuuurxor\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo(左侧符号)
,但是xor
可以被中任何可用的中缀操作符所取代。这意味着我?伙计,python比我想象的要复杂得多,所以你可以说类似于(CompositionA | CompositionB)//CompositionC
,它的意思是“先播放构图A,然后播放构图B,同时同时并行播放构图C。”谈谈一段漂亮的代码吧!
>>> a = {1, 2, 3}
>>> b = {1, 4, 5}
>>> a^b
{2, 3, 4, 5}
>>> a.symmetric_difference(b)
{2, 3, 4, 5}
>>> a = 5
>>> b = 6
>>> a^b
3
101 (5 decimal)
XOR 110 (6 decimal)
-------------------
011 (3 decimal)