2009-10-26 2 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 

Что мне нужно знать следующее: в случае, если условие истинно, будет функция налюбоваться в списке и не возвращаются Ложные ? Или мне нужен оператор break?

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? Моя ставка не указана ... –

+2

Не нужно рисковать своими деньгами ... попробуйте! 'print 'a' in ('b', 'c')' –

+0

http://docs.python.org/reference/expressions.html#in прокрутите вниз до "Операторы, а не в тесте для членства в коллекции". –

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

большой, а также. спасибо за простоту теста! –

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)