“if var and var2 == getSomeValue()”in python - 如果第一个是false,第二个语句是否被评估?'

“if var and var2 == getSomeValue()”in python - 如果第一个是false,第二个语句是否被评估?'

问题描述:

我有一些像这样的代码:“if var and var2 == getSomeValue()”in python - 如果第一个是false,第二个语句是否被评估?'

if var: 
    if var2 == getSomeValue() 

这可能是一个表达式。

if var and var2 == getSomeValue(): 

...但如果getSomeValue()var真只能叫。

因此,当调用if var and var2 == getSomeValue()时,都由解释器进行评估,或者评估在var处停止,如果False?我可以在python文档中找到这些信息吗? (我不知道该搜索什么...:/)

这就是所谓的短路,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

第一个答案,并将行为命名为short-circuiting正是我所期待的。 http://en.wikipedia.org/wiki/Short-circuit_evaluation谢谢!下面是关于它的PEP:http://www.python.org/dev/peps/pep-0308/ – 2011-06-03 17:51:10

+0

@有人仍然使用你的MS-DOS任何时候。 – 2011-06-03 17:51:47

+0

@有人仍然使用你的MS-DOS + 1连接到PEP。 – 2011-06-03 17:58:20

评估getSomeValue将不进行评估:

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

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

第二项是不计算 - 你可以用一个简单的程序验证这一点:

def boo(): 
    print "hi" 
    return True 

a = False 
b = True 

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

运行它不产生输出,所以你可以看到boo()从未被调用过。

如果varFalse,则停止评估。

查看短路行为PEP 308

Python documentationandor是短路,所以没有,var2 == getSomeValue()不会,如果var是假的评估。

重新“我不知道搜索什么

你并不需要搜索的时候有可用的索引:

浏览到Python home page。先后点击

  • 文档
  • 当前文档
  • 指数(它在右上角)
  • 一个

向下滚动,直到你看到

and 
    bitwise 
    operator 

你不想要bitwise,点击operator

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