具有两个条件的嵌套 if 与 if 语句的行为不同:
Nested if vs. if statement with two conditions behaves differently:
我有一个字典 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')
此代码的结果如预期的那样 'ok'。
if my_dict1['Error'] == False & len(my_dict2)> 0:
print('ok')
else:
print('no')
这导致 'no'。我对 & 语句的理解有误吗?
Am I understanding the & statement wrong?
不幸的是,是的,我是这么认为的。 &
是按位与,其中逻辑与在Python.
中称为and
有关逻辑运算符和按位运算符之间差异的详细信息,请参阅此页面:https://wiki.python.org/moin/BitwiseOperators
错误源于运算符的优先级。您的表达式相当于:
my_dict1['Error'] == <b>(False & len(my_dict2))</b> > 0
现在由于 False & 1
将导致 0
,因为 False
充当 0
,并且 0
的按位 and-ing 和1
是 0
.
表达式my_dict['Error'] == 0 > 0
是False
。 my_dict['Error'] == 0
会成功,但是 0 > 0
当然是 False
.
如果要检查两个条件,应使用 and
运算符,例如:
if my_dict1['Error'] == False <b>and</b> len(my_dict2) > 0:
print('ok')
else:
print('no')
或更多 Pythonic:
if <b>not</b> my_dict1['Error'] and my_dict2:
print('ok')
else:
print('no')
两者并不完全相同,因为 not my_dict['Error']
会成功,因为相应值的 真实性 是 True
。如果项目映射到 bool
s,那么两者是等价的。
我有一个字典 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')
此代码的结果如预期的那样 'ok'。
if my_dict1['Error'] == False & len(my_dict2)> 0:
print('ok')
else:
print('no')
这导致 'no'。我对 & 语句的理解有误吗?
Am I understanding the & statement wrong?
不幸的是,是的,我是这么认为的。 &
是按位与,其中逻辑与在Python.
and
有关逻辑运算符和按位运算符之间差异的详细信息,请参阅此页面:https://wiki.python.org/moin/BitwiseOperators
错误源于运算符的优先级。您的表达式相当于:
my_dict1['Error'] == <b>(False & len(my_dict2))</b> > 0
现在由于 False & 1
将导致 0
,因为 False
充当 0
,并且 0
的按位 and-ing 和1
是 0
.
表达式my_dict['Error'] == 0 > 0
是False
。 my_dict['Error'] == 0
会成功,但是 0 > 0
当然是 False
.
如果要检查两个条件,应使用 and
运算符,例如:
if my_dict1['Error'] == False <b>and</b> len(my_dict2) > 0:
print('ok')
else:
print('no')
或更多 Pythonic:
if <b>not</b> my_dict1['Error'] and my_dict2:
print('ok')
else:
print('no')
两者并不完全相同,因为 not my_dict['Error']
会成功,因为相应值的 真实性 是 True
。如果项目映射到 bool
s,那么两者是等价的。