2013-05-29 94 views
1

今天我學習生成器迭代器等在其他節省內存,我認爲寧願然後有列表傾倒在內存中更好地讓他們在需要時進行評估,所以我做了一個簡單的測試,就像下面的發電機像這樣。如何使用python生成器

def test(*args): 
    for i in args: 
     yield i 

當我像下面一樣使用它時,它會產生所需的效果。

for i in test(range(10)): 
    print i 

,象這樣

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

輸出,但這則範圍將轉儲到失敗的目的,因此函數的所有數字我想的xrange像下面

for i in test(xrange(10)): 
    print i 

我得到一個相當驚人的輸出像這樣

xrange(10) 

但尋找其他的方式,因爲x範圍將只迭代評估時,所以我儘量強迫它做它像這樣

for i in ye(*xrange(10)): 
    print i 

,然後我得到了這樣的

o 
1 
. 
. 
輸出

可有人解釋詳細情況請參考

回答

1

在功能定義中使用*要求調用者向函數提供單獨的參數。考慮刪除它並直接使用args

+0

想知道爲什麼我每次使用星號時都會輸入每個數字,星星對xrange有什麼作用。 – user1940979

+0

http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists –