【发布时间】:2020-04-14 12:26:34
【问题描述】:
为什么这两个表达式中的运算符“&”不起作用?
# 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
在一个小时后变得疯狂之后,我通过使用我从未预料到的“问题”“解决了”这个问题:
# The "correct" output(transforming a bool type into a bool type something that works but seems stupid...):
bool(re.search(r'\d', "4foo"))&bool(len("4foo")==4)
>True
解决方案
bool(re.search(r'\d', "4foo")) and len("4foo")==4
【问题讨论】:
-
这是错误的
len("4foo"==4),我猜应该是len("4foo") == 4。无论如何使用and而不是 & -
在 python 中,当你计算布尔值时,你需要使用 'and' 或 'or' 词来比较。
-
因为
&是按位与 运算符,而不是布尔与运算符,在Python 中是and。而且它的优先级不同 -
另请注意,
&运算符是按位的,并且将and运算符用于布尔逻辑 -
在我的 python shell 中粘贴这个
bool(re.search(r'\d', "4foo"))& (len("4foo")==4)时,我得到了预期的(嗯,有点……)True结果。但是您仍然应该在这里使用逻辑and运算符(并摆脱那些无用的bool()调用 - Python 对象都有一个真值)。