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