这两个Python语句有何不同之处:
>>> if a==1 and b==2:
pass
>>> if a==1:
if b==2:
pass
答案 0 :(得分:2)
如果这两个陈述是整个代码(例如,没有else
与if
匹配),这两个陈述将具有相同的效果。
答案 1 :(得分:1)
没有实际差异。两者都必须评估a==1
和b==2
执行pass
,以及"短路"如果b==2
为a==1
,则不评估False
。
这是一个短路的例子:
>>> a=1
>>> b=2
>>> if a==1 and b==2:
... print('pass')
...
pass
这里,第一个语句为True,因此第二个语句被评估,但c
不存在:
>>> if a==1 and c==2:
... print('pass')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>> if a==1:
... if c==2:
... print('pass')
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
NameError: name 'c' is not defined
这里,第一个语句为false,因此不评估无效变量:
>>> a=2
>>> if a==1 and c==2:
... print('pass')
...
>>>
>>> if a==1:
... if c==2:
... print('pass')
...
>>>