在Python中,"if var and var2 == getSomeValue()" - 如果第一个为假,第二个语句会被评估吗?

5 投票
6 回答
523 浏览
提问于 2025-04-16 18:55

我有一些代码像这样:

if var:
    if var2 == getSomeValue()

这可以写成一个简单的表达式。

if var and var2 == getSomeValue():

...但是,只有当 var 为真时,才能调用 getSomeValue()

所以,当我调用 if var and var2 == getSomeValue() 时,解释器会同时检查两个条件吗?还是说如果 var 是假,就会停止检查?我在哪里可以找到这个信息呢?(我不知道该搜索什么...:/ )

6 个回答

2

如果 varFalse,那么后面的判断就不再继续了。

想了解更多,可以看看 短路行为 这一部分,详细内容在 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 的精彩评论中被忽视。

撰写回答