在Python中,"if var and var2 == getSomeValue()" - 如果第一个为假,第二个语句会被评估吗?
我有一些代码像这样:
if var:
if var2 == getSomeValue()
这可以写成一个简单的表达式。
if var and var2 == getSomeValue():
...但是,只有当 var
为真时,才能调用 getSomeValue()
。
所以,当我调用 if var and var2 == getSomeValue()
时,解释器会同时检查两个条件吗?还是说如果 var
是假,就会停止检查?我在哪里可以找到这个信息呢?(我不知道该搜索什么...:/ )
6 个回答
2
如果 var
是 False
,那么后面的判断就不再继续了。
想了解更多,可以看看 短路行为 这一部分,详细内容在 PEP 308。
2
第二个项目没有被执行 - 你可以通过一个简单的程序来验证这一点:
def boo():
print "hi"
return True
a = False
b = True
if a and b == boo():
print "hi2"
运行这个程序不会有任何输出,所以你可以看到 boo()
这个函数从来没有被调用。
10
这叫做短路运算,Python 也支持这个,所以你没问题。
更新:这里有个简单的例子。
>>> def foo():
... print "Yay!"
...
>>> if True and foo() is None:
... print "indeed"
...
Yay!
indeed
>>> if False and foo() is None:
... print "nope"
...
更新 2:把相关的 PEP (308) 放在我的回答里,以免在 @Somebody still uses you MS-DOS 的精彩评论中被忽视。