我有一些像这样的代码:
if var:
if var2 == getSomeValue()
这可以是单个表达式。
if var and var2 == getSomeValue():
...但只有在getSomeValue()
为True时才能调用var
。
因此,在调用if var and var2 == getSomeValue()
时,解释器会对其进行评估,或者var
如果False
,评估会停止?我在哪里可以找到有关python文档的信息? (我不知道该搜索什么......:/)
答案 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)
如果var
为False
,则评估停止。
请参阅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表示and
和or
是短路的,因此如果var2 == getSomeValue()
为假,则不会评估var
。< / p>
答案 5 :(得分:1)
重新“我不知道该搜索什么”
当有可用的索引时,您无需搜索:
浏览Python home page。先后点击
向下滚动,直至看到
and
bitwise
operator
您不想bitwise
,请点击operator
。
如果您使用的是Windows,则可以在计算机上安装手册,并提供足够好的GUI界面。查看左上角附近的目录/索引/搜索/收藏夹窗格。