2010-09-12 61 views

回答

7

python解釋器是你的朋友。

>>> 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 

總之,不,它會被調用一次。

1

這沒有必要。

for a in object.a_really_huge_function(): 

只需撥打a_really_huge_function一次。

將結果保存在變量中的唯一好處是,如果您要在代碼的其他地方調用相同的函數。

如果函數返回一個列表,那麼通過使object.a_really_huge_function()返回iterator,您可能會在內存使用情況方面做得更好,但除此之外您還可以。

4

您也可以使用發電機由算法的每一步之後放棄控制權,以避免返回巨大的結果如下:

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 

在這種情況下,該函數被調用一次,但有超過huge_number其執行傳播不同的時間。有關更多詳細信息,請參閱yield文檔。

+1

問題是'a_really_huge_fuction'被多次調用。這個答案沒有解決這個問題,那麼爲什麼選擇? – sdolan 2010-09-13 04:36:49

+0

我已經澄清了答案。在生成器的情況下,一旦bu分階段執行,就會調用該函數。 – 2010-09-13 10:53:12

+0

-1 - > +1。謝謝 – sdolan 2010-09-13 17:09:54