2009-10-26 16 views
0

je le code suivant:Comment ce comportement peut-il être accompli? Python « court circuting » test

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

Ce que je dois savoir ce qui suit: si la condition if évalue true, sera la fonction arrêter de regarder dans la liste et ne jamais revenir Faux ? Ou ai-je besoin d'une déclaration de rupture?

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

Si le code suivant ne résout pas mon problème, que puis-je utiliser pour simuler ce comportement?

Merci

Répondre

8

return est la fin de la ligne, et rien d'autre va se passer dans cette fonction après. D'autre part, vous pouvez réécrire votre fonction

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

merci beaucoup. Très pythonique: P Dans ce cas, si la self.outputGeodatabase n'existe pas dans la liste, cela provoquera-t-il la fonction à retourner None ou False? Mon pari est Aucun ... –

+2

Pas besoin de risquer votre argent ... essayez-le! 'print 'a' in ('b', 'c')' –

+0

http://docs.python.org/reference/expressions.html#d défilez vers "Les opérateurs dans et pas dans le test de l'adhésion à la collection." –

1

La déclaration return sera en effet faire en sorte que la fonction à quitté à ce moment. Aucun autre code n'est exécuté dans la fonction.

Voici un test simple que vous pouvez exécuter pour prouver le point:

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

Et l'exécuter:

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

grande, aussi bien. merci pour la simplicité du test! –

2

Vous n'avez pas besoin du mot-clé arrêt dans le code ci-dessus. En fait, vous n'avez pas besoin du

else: 
    pass 

soit. Le

return True 

quittera la fonction.

0

Je pense que l'utilisation any() est le meilleur choix:

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