2010-09-12 10 views

Répondre

7

L'interpréteur python est votre ami.

>>> def some_func(): 
...  print 'in some_func' 
...  return [1, 2, 3, 10] 
... 
>>> for a in some_func(): 
...  print a 
... 
in some_func 
1 
2 
3 
10 

En bref, non, il est appelé une seule fois.

1

Ce n'est pas nécessaire.

for a in object.a_really_huge_function(): 

appelle a_really_huge_function une seule fois. Le seul avantage de sauvegarder le résultat dans une variable serait si vous appelez la même fonction ailleurs dans votre code.

Si la fonction renvoie une liste, vous pouvez faire mieux en termes d'utilisation de la mémoire en faisant object.a_really_huge_function() retourner un iterator, mais sinon vous allez bien.

4

Vous pouvez également utiliser des générateurs pour éviter des résultats énormes retour en renonçant à un contrôle après chaque étape de l'algorithme comme suit:

def a_really_huge_fuction(huge_number): 
    i = 0 
    while i < huge_number: 
     yield i # Relinquishes control to caller, resume execution at next line 
     i = i + 1 

Dans ce cas, la fonction est appelée une fois, mais il a sa propagation d'exécution sur huge_number des moments différents. Voir la documentation yield pour plus de détails.

+1

La question a été 'a_really_huge_fuction' a été appelée plus d'une fois. Cette réponse ne répond pas à cela, alors pourquoi les upvotes? – sdolan

+0

J'ai clarifié que de répondre. Dans le cas des générateurs, la fonction est appelée une fois que bu est exécuté en phases. –

+0

-1 -> +1. Merci – sdolan