“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。
答
评估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()
从未被调用过。
答
重新“我不知道搜索什么”
你并不需要搜索的时候有可用的索引:
浏览到Python home page。先后点击
- 文档
- 当前文档
- 指数(它在右上角)
- 一个
向下滚动,直到你看到
and
bitwise
operator
你不想要bitwise
,点击operator
。
如果您使用的是Windows操作系统,则您的计算机上有手册,并带有足够好的GUI界面。查看左上角附近的内容/索引/搜索/收藏夹窗格。
第一个答案,并将行为命名为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
@有人仍然使用你的MS-DOS任何时候。 – 2011-06-03 17:51:47
@有人仍然使用你的MS-DOS + 1连接到PEP。 – 2011-06-03 17:58:20