如何实现这种行为? Python“短路”测试

时间:2009-10-26 17:51:43

标签: python short-circuiting

我有以下代码:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
        else:
            pass
    return False

我需要知道以下内容:如果if条件的计算结果为true,那么函数是否会停止在列表中查找并且永远不会返回False?或者我需要休息声明吗?

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
            break
        else:
            pass
    return False

如果以下代码无法解决我的问题,我可以用什么模拟该行为?

由于

4 个答案:

答案 0 :(得分:8)

return是该行的结尾,之后该函数不会发生任何其他事情。另一方面,您可以将您的功能重写为

def testGeodatabase(self):
    return self.outputGeodatabase in self.gp.ListWorkspaces("*","ALL")

答案 1 :(得分:2)

上面的代码中不需要break关键字。实际上,你不需要

else:
   pass

任一。在

return True

将退出该功能。

答案 2 :(得分:1)

return语句确实会导致该点退出该函数。函数中不再执行任何代码。

这是一个简单的测试,你可以运行来证明这一点:

def someFunction(nums):
    for i in nums:
        if i == 1:
            return "Found 1!"
    return "Never found 1"

运行它:

>>> someFunction([2])  
'Never found 1'  
>>> someFunction([2,1,3])  
'Found 1!'  

答案 3 :(得分:0)

我认为使用any()是最佳选择:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    return any(x == self.outputGeodatabase for x in geodatabaseList)