2017-03-13 117 views
-1

如何理解函數repeater2repeater3關於Python生成器

def repeater1(value): 
    new = (yield value) 

def repeater2(value): 
    while True: 
     new = (yield value) 

def repeater3(value): 
    while True: 
     new = (yield value) 
     if new is not None:value = new 

r1,r2,r3 = repeater1(1),repeater2(2),repeater3(3) 
r1.next() #1 
r2.next() #2 
r3.next() #3 

r1.send(4) #StopIteration 
r2.send(4) #2 
r2.next() #2 
r3.send(4) #4 
r3.next() #4 
+0

'new = field value'是無效的python。這段代碼似乎有一堆遺漏。 – pvg

+1

你是否意外地混淆了'field'和'yield'? –

+0

@KlausD。 Ooo我很抱歉, – Alex

回答

-2

變量new不會做功能repeater2(或repeater1爲此事)任何東西。

def repeater2(value): 
    while True: 
     yield value 

還呼籲r2.send()是沒有意義的,因爲它不會做產量表達什麼:該功能可作爲被改寫。無論發送給它什麼,它總是會返回2,因爲這是在生成器初始化期間傳入的。

r3第一次產生初始值3,然後在後續調用中使用send調用的任何值(只要它不是無)。變量new實際上在這裏使用。

將這些函數重命名爲non_repeater,repeatersendable_repeater可能是有意義的。

+0

@Alex .. Downvoting沒有跡象表明,爲什麼主要是通過駕駛知道nothins。不要讓這影響你。 – sureshvv