我有一个字典my_dict1
,其中包含一个键'Error'
,我还有另一个字典my_dict2
,它具有多个键或为空。我希望有一个if语句,用于检查my_dict1['Error']
是否为False并检查my_dict2
是否包含任何内容。代码如下:
my_dict1 = {'Error': False}
my_dict2 = {'somekey': True}
if my_dict1['Error'] == False:
if len(my_dict2) > 0:
print('ok')
else:
print('no')
此代码按预期结果为“正常”。
if my_dict1['Error'] == False & len(my_dict2)> 0:
print('ok')
else:
print('no')
结果为“否”。我是否理解&陈述错误?
答案 0 :(得分:2)
错误源于运算符的优先级。您的表情等同于:
my_dict1['Error'] == (False & len(my_dict2)) > 0
现在,由于False & 1
将产生0
,因为False
充当0
,并且0
和{{1}的按位与运算}是1
。
表达式0
是my_dict['Error'] == 0 > 0
。 False
将成功,但是my_dict['Error'] == 0
当然是0 > 0
。
如果要检查两个条件,则应使用False
运算符,例如:
and
或更多 Pythonic :
if my_dict1['Error'] == False and len(my_dict2) > 0:
print('ok')
else:
print('no')
鉴于给定值真实性为if not my_dict1['Error'] and my_dict2:
print('ok')
else:
print('no')
,not my_dict['Error']
将成功,因此两者并不完全相同。如果项目映射到True
上,则两者是等效的。
答案 1 :(得分:1)
我是否理解&陈述错误?
很遗憾,是的,我是这样认为的。 &
是按位AND,在Python中将逻辑AND称为and
。
有关逻辑运算符与按位运算符之间的区别的更多信息,请参见以下页面:https://wiki.python.org/moin/BitwiseOperators