我对python有点新意,所以我还在学习东西。我知道你可以独家或使用^
,但出于好奇,有没有办法可以做一个独家或单词?例如,您可以使用and
代替&
,而您可以or
代替||
。是否有^
的其中一个?
答案 0 :(得分:5)
and
和or
短路,意味着如果左侧使表达式始终为True
或始终为False
,则右侧甚至不会被评估:
False and f() # Doesn’t call f, because if one is False the result is always False
True or f() # Doesn’t call f, because if one is True the result is always True
False & f() # Calls f anyway
True | f() # Calls f anyway
没有这样的短路左手专属或(在a ^ b
中,无论a
是什么,b
都可以改变整体价值),所以只需要对于一个操作员。
进一步详细说明:&
,|
和^
是可重载的运算符,这意味着类型可以定义它们以生成任何值。 (在int
s的常见情况下,它们按位运行。)and
和or
不是,并且总是评估它们的两个操作数之一:如果它是假的,那么左边的操作数是在and
的情况下是正确的,在or
的情况下是左边的,如果是真的则是左边的,在xor
的情况下是正确的。对于假设的>>> True and "hello"
"hello"
>>> 0 and True
0
>>> True or ""
True
>>> False or ""
""
>>> "truthy" xor "also truthy"
??? – can’t be either of these, because it has to be logically false
运算符,不清楚选择哪一个。
vertical-align: top;
答案 1 :(得分:0)
使用operator
模块并注意,当操作两个bool时,xor与检查不等式相同。
from operator import xor
bitwise_xor1 = a ^ b
bitwise_xor2 = xor(a,b)
from operator import ne
logical_xor1 = a != b
logical_xor2 = ne(a,b)
请注意,对于bool
,按位操作实际上会返回bool
,但对于其他类型,它们可能不会。{/ p>
答案 2 :(得分:-1)
目前尚未存在,但如果您需要支持宏,则可以使用pypi中的macro包。