5

我有一些这样的代码:

if var:
    if var2 == getSomeValue()

这可以在一个表达式中。

if var and var2 == getSomeValue():

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

那么,在调用时if var and var2 == getSomeValue(),都由解释器评估,还是评估在varif处停止False?在哪里可以找到有关 python 文档的这些信息?(我不知道要搜索什么...:/)

4

6 回答 6

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 的优秀评论中被忽视,仍然使用你的MS-DOS。

于 2011-06-03T17:47:44.560 回答
2

第二个项目没有被评估——你可以用一个简单的程序来验证这一点:

def boo():
  print "hi"
  return True

a = False
b = True

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

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

于 2011-06-03T17:49:07.877 回答
2

如果varFalse,则评估停止。

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

于 2011-06-03T17:51:48.960 回答
1

评估 getSomeValue 不会被评估:

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

def foo():
   print "In foo"
   return False
于 2011-06-03T17:49:01.263 回答
1

Python文档and并且or是短路的,所以不,如果为假,var2 == getSomeValue()则不会被评估。var

于 2011-06-04T08:33:43.637 回答
1

回复“我不知道要搜索什么

当有可用索引时,您不需要搜索:

浏览到Python 主页。依次点击

  • 文档
  • 当前文档
  • 索引(它在右上角)
  • 一种

向下滚动直到看到

and
    bitwise
    operator

你不想要bitwise,点击operator

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

于 2011-06-04T09:08:21.390 回答