Python 异或的词形
我对python有点陌生,所以我还在学习。我知道你可以通过使用Python 异或的词形,python,operators,Python,Operators,我对python有点陌生,所以我还在学习。我知道你可以通过使用^来实现独占或独占,但出于好奇,有没有一种方法可以用文字实现独占或独占?例如,您可以使用和代替&,也可以使用或代替|。是否有一个用于^?不,目前还不存在,但如果您需要对宏的支持,可以使用pypi的包。不,目前还不存在,但如果您需要对宏的支持,可以使用pypi的包。和和或短路,这意味着如果左侧使表达式始终为True或始终为False,则右侧甚至不会被计算: False and f() # Doesn’t call f, because
^
来实现独占或独占,但出于好奇,有没有一种方法可以用文字实现独占或独占?例如,您可以使用和
代替&
,也可以使用或
代替|
。是否有一个用于^
?不,目前还不存在,但如果您需要对宏的支持,可以使用pypi的包。不,目前还不存在,但如果您需要对宏的支持,可以使用pypi的包。和和或短路,这意味着如果左侧使表达式始终为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
排他性or(在a^b
中,无论a
是什么,b
都可以改变整体值),因此只需要一个操作符
更详细地说:&
、|
和^
是可重载的运算符,这意味着类型可以定义它们以生成任何值。(在int
s的常见情况下,它们按位动作。)和和和或不是,并且总是计算它们的两个操作数中的一个:左操作数如果是假操作数,右操作数如果是假操作数,左操作数如果是真操作数,右操作数则是假操作数。对于一个假设的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
和
和或
短路,这意味着如果左侧使表达式始终为真
或始终为假
,则右侧甚至不会被计算:
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
排他性or(在a^b
中,无论a
是什么,b
都可以改变整体值),因此只需要一个操作符
更详细地说:&
、|
和^
是可重载的运算符,这意味着类型可以定义它们以生成任何值。(在int
s的常见情况下,它们按位动作。)和和和或不是,并且总是计算它们的两个操作数中的一个:左操作数如果是假操作数,右操作数如果是假操作数,左操作数如果是真操作数,右操作数则是假操作数。对于一个假设的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
使用操作符
模块,注意在两个布尔上操作时,异或与检查不等式相同
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
s,按位运算实际上会返回bool
,但对于其他类型,它们可能不会返回。使用运算符
模块,并注意在两个bool上操作时,异或与检查不等式相同
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
s,按位操作实际上返回bool
,但对于其他类型,它们可能不返回。和和&
是两个非常不同的运算符,或和
(Python中没有|
).和
和&
是两个非常不同的运算符,或
和
(Python中没有|
)也是如此。当然,主要的区别是,就是说,和和或对布尔值进行运算,&
和|
对单个位进行运算。@DYZ:&
和|
可以重载任何操作,并且它们在布尔值上的工作方式与您期望的一样,也就是说,True | False为True
True | False为True
,因为True
和False
表示为1和0。但是1 | 2
是3(而且3不是真的
)。@DYZ:1
和2
也不是布尔值,1和2
是2
。但是1和是0,这可能会让那些忘记和是按位应用的人感到惊讶。当然,主要的区别是,就是说,和和或对布尔值进行运算,&
和|
对单个位进行运算。@DYZ:&
和|
可以重载任何操作,并且它们在布尔值上的工作方式与您期望的一样,也就是说,True | False为True
True | False为True
,因为True
和False
表示为1和0。但是1 | 2
是3(而且3不是真的
)。@DYZ:1
和2
也不是布尔值,1和2
是2
。但是1和是0,这可能会让那些忘记和是按位应用的人感到惊讶。