Как такое поведение может быть достигнуто? Python "короткий оборот" тест - PullRequest
0 голосов
/ 26 октября 2009

У меня есть следующий код:

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 ]

8 голосов
/ 26 октября 2009

return - это конец строки, и в этой функции больше ничего не произойдет после этого. С другой стороны, вы можете переписать свою функцию как

def testGeodatabase(self):
    return self.outputGeodatabase in self.gp.ListWorkspaces("*","ALL")
2 голосов
/ 26 октября 2009

Вам не нужно ключевое слово break в приведенном выше коде. На самом деле, вам не нужно

else:
   pass

либо.

return True

выйдет из функции.

1 голос
/ 26 октября 2009

Оператор 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 голосов
/ 26 октября 2009

Я думаю, что использование any() - лучший выбор:

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