具有两个条件的嵌套if vs. if语句的行为不同:

时间:2019-07-13 10:41:36

标签: python if-statement nested-if

我有一个字典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')

结果为“否”。我是否理解&陈述错误?

2 个答案:

答案 0 :(得分:2)

错误源于运算符的优先级。您的表情等同于:

my_dict1['Error'] == (False & len(my_dict2)) > 0

现在,由于False & 1将产生0,因为False充当0,并且0和{{1}的按位与运算}是1

表达式0my_dict['Error'] == 0 > 0False将成功,但是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