¿Cómo se puede lograr este comportamiento? Python & # 8220; cortocircuito # 8221; prueba

StackOverflow https://stackoverflow.com/questions/1626267

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo el siguiente código:

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

Lo que necesito saber es lo siguiente: en caso de que la condición if se evalúe como verdadera, ¿la función dejará de buscar en la lista y nunca devolverá False? ¿O necesito una declaración de ruptura?

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

Si el siguiente código no resuelve mi problema, ¿qué puedo usar para simular ese comportamiento?

Gracias

¿Fue útil?

Solución

return es el final de la línea, y nada más sucederá después en esa función. Por otro lado, podría reescribir su función como

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

Otros consejos

No necesita la palabra clave break en el código anterior. En realidad, no necesitas el

else:
   pass

tampoco. El

return True

saldrá de la función.

La instrucción return hará que la función salga en ese punto. No se ejecuta más código en la función.

Aquí hay una prueba simple que puede ejecutar para probar el punto:

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

Y ejecutándolo:

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

Creo que usar any () es la mejor opción:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    return any(x == self.outputGeodatabase for x in geodatabaseList)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top