python中的双布尔运算符
为什么不在这两个表达式中使用运算符“&”python中的双布尔运算符,python,boolean,operators,Python,Boolean,Operators,为什么不在这两个表达式中使用运算符“&” # First, type bool bool(re.search(r'\d', "4foo")) >True # Second, type bool len("4foo")==4 >True type(len("4foo")==4))) >bool 当像这样使用运算符“&”时,我得到的False不正确: # Expected output as this example: True&True >True # The
# First, type bool
bool(re.search(r'\d', "4foo"))
>True
# Second, type bool
len("4foo")==4
>True
type(len("4foo")==4)))
>bool
当像这样使用运算符“&”时,我得到的False
不正确:
# Expected output as this example:
True&True
>True
# The "wrong" output:
bool(re.search(r'\d', "4foo"))& (len("4foo")==4)
>False
在疯狂了一个小时后,我用我从未想到的“问题”解决了这个问题:
解决方案
您需要这样做:
将和替换为和:
In [638]: bool(re.search(r'\d', "4foo")) and len("4foo")==4
Out[638]: True
和
测试这两个表达式在逻辑上是否都是真的,而和
(与真/假值一起使用时)测试这两个表达式是否都是真的。请注意括号
len("4foo"==4) ------------> len("4foo")==4
和条件
re.search(r'\d', "4foo")and len("4foo")==4
这是错误的len(“4foo”)==4
,我想应该是len(“4foo”)==4
。无论如何,在python中比较布尔值时,使用和
而不是&因为&
是按位and运算符,而不是布尔and运算符,在python中是和
。它的优先级是不同的,所以请注意,&
操作符是按位的,在粘贴这个bool(re.search(r'\d',4foo')和(len(“4foo”)==4)时,使用布尔逻辑的和操作符,在我的python shell中,我得到了预期的(嗯,有点…)结果True
。但是您仍然应该在这里使用逻辑和操作符(并去掉那些无用的bool()
调用-Python对象都有一个真值)。因为和测试它的操作数是否都为真(这只是布尔算术中逻辑“and”的定义),您对按位&
运算符的解释没有帮助。此外,在使用逻辑和
时,您不需要bool(something)
——Python对象在布尔上下文中使用时都有真值。
len("4foo"==4) ------------> len("4foo")==4
re.search(r'\d', "4foo")and len("4foo")==4