2009-10-26 32 views
0

我有以下代码:这种行为如何实现? Python的“短circuting”测试

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

什么,我需要了解以下内容:在的情况下,如果条件计算为真,将功能停止寻找在列表中,从未返回False ?或者我需要休息声明?

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

如果下面的代码没有解决我的问题,我可以用什么做的模拟这种行为?

感谢

回答

8

return是该行的结束,并没有什么人会在发生之后起作用。另一方面,您可以将您的功能重写为

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

非常感谢。非常pythonic:P 在这种情况下,如果self.outputGeodatabase不存在于列表中,是否会导致函数返回None或False?我的赌注是无... – 2009-10-26 17:59:00

+2

没有必要冒你的钱...尝试它! 'print'a'in('b','c')' – 2009-10-26 18:16:16

+0

http://docs.python.org/reference/expressions.html#in向下滚动到“运营商在和不在测试集合成员身份。” – 2009-10-26 18:19:49

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!' 
+0

伟大的,也是如此。感谢测试的简单性! – 2009-10-26 18:01:11

2

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

else: 
    pass 

要么。

return True 

将退出该功能。

0

我觉得用any()是最好的选择:

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