“如果var和var2 == getSomeValue()”在python中 - 如果第一个为false,那么第二个语句是否被评估?

时间:2011-06-03 17:45:32

标签: python short-circuiting

我有一些像这样的代码:

if var:
    if var2 == getSomeValue()

这可以是单个表达式。

if var and var2 == getSomeValue():

...但只有在getSomeValue()为True时才能调用var

因此,在调用if var and var2 == getSomeValue()时,解释器会对其进行评估,或者var如果False,评估会停止?我在哪里可以找到有关python文档的信息? (我不知道该搜索什么......:/)

6 个答案:

答案 0 :(得分: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:将relevant PEP (308)放在我的答案中,以免在@Somebody的优秀评论中被忽略,但仍然使用MS-DOS。

答案 1 :(得分:2)

未评估第二项 - 您可以使用简单程序验证这一项:

def boo():
  print "hi"
  return True

a = False
b = True

if a and b == boo():
  print "hi2"

运行它不会产生任何输出,因此您可以看到永远不会调用boo()

答案 2 :(得分:2)

如果varFalse,则评估停止。

请参阅PEP 308中的短路行为部分。

答案 3 :(得分:1)

评估getSomeValue将不会被评估:

var = False
if var and foo():
   print "here"
else:
   print "there"

def foo():
   print "In foo"
   return False

答案 4 :(得分:1)

Python documentation表示andor是短路的,因此如果var2 == getSomeValue()为假,则不会评估var。< / p>

答案 5 :(得分:1)

重新“我不知道该搜索什么

当有可用的索引时,您无需搜索:

浏览Python home page。先后点击

  • 文档
  • 当前文档
  • 索引(位于右上角)
  • A

向下滚动,直至看到

and
    bitwise
    operator

您不想bitwise,请点击operator

如果您使用的是Windows,则可以在计算机上安装手册,并提供足够好的GUI界面。查看左上角附近的目录/索引/搜索/收藏夹窗格。