Como pode este comportamento ser realizado? Python “curto-circuito” test
-
06-07-2019 - |
Pergunta
Eu tenho o seguinte código:
def testGeodatabase(self):
geodatabaseList = self.gp.ListWorkspaces("*","ALL")
for x in geodatabaseList:
if x == self.outputGeodatabase:
return True
else:
pass
return False
O que eu preciso saber o seguinte: no caso de as Se a condição for avaliada como True, será a paragem da função procura na lista e nunca mais voltar Falso? Ou eu preciso uma instrução break?
def testGeodatabase(self):
geodatabaseList = self.gp.ListWorkspaces("*","ALL")
for x in geodatabaseList:
if x == self.outputGeodatabase:
return True
break
else:
pass
return False
Se o código a seguir não resolve o meu problema, o que posso usar para fazer simular esse comportamento?
Graças
Solução
return
é o fim da linha, e nada mais vai acontecer nessa função depois. Por outro lado, você poderia reescrever sua função como
def testGeodatabase(self):
return self.outputGeodatabase in self.gp.ListWorkspaces("*","ALL")
Outras dicas
Você não precisa de uma palavra-chave quebra no código acima. Na verdade, você não precisa o
else:
pass
quer. A
return True
irá sair da função.
A declaração return
vai realmente fazer com que a função para ser encerrado nesse ponto. Nenhum código adicional é executado na função.
Aqui é um teste simples que você pode executar para provar o ponto:
def someFunction(nums):
for i in nums:
if i == 1:
return "Found 1!"
return "Never found 1"
E executá-lo:
>>> someFunction([2])
'Never found 1'
>>> someFunction([2,1,3])
'Found 1!'
Eu acho que o uso de any()
é a melhor escolha:
def testGeodatabase(self):
geodatabaseList = self.gp.ListWorkspaces("*","ALL")
return any(x == self.outputGeodatabase for x in geodatabaseList)