2017-09-14 111 views
1

我這樣做:Reyield發電機

def walk(samples): 
    for d in range(samples): 
     yield d 

def walk200(): 
    for d in walk(200): 
     yield d 

但實際上,我想這是什麼,使代碼更短:

def walk200(): 
    reyield walk(200) 

我該怎麼辦reyield

+3

Python 3.x:'從步行(200)產生' –

+1

@MosesKoledoye其中x> = 3 –

回答

4

的Python 3.3和高達:

def walk200(): 
    yield from walk(200) 

對於較低的版本中,你被卡住你發佈的代碼。

2

在您的具體示例中,您可以簡單地使用return walk(200),這將適用於所有python版本。只有在某些情況下才需要yield from

+0

有趣。你能澄清嗎?什麼時候和爲什麼需要,什麼時候不需要? – dangonfast

+0

@dangonfast(1)如果在一個函數中有多個yield語句,並且只想將其中的一些委派給另一個函數,或者更重要的是(2)如果將生成器用作協程,請參見https:/ /stackoverflow.com/questions/9708902/in-practice-what-are-the-main-uses-for-the-new-yield-from-syntax-in-python-3 –