2014-02-14 45 views
4

在Python我可以建立一個發電機,像這樣:電流產生的價值

def gen(): 
    x=range(0,100) 
    for i in x: 
    yield i 

我現在可以使用定義生成器的實例:

a=gen() 

,並使用來自發電機拉新值

a.next() 

但是有沒有辦法--- a.current() ---得到發電機的當前值?

回答

5

您可以設置變量的值。

current_value = a.next() 

然後使用current_value來表示所有值。 的Python經常在這裏給您x限定爲的當前值報表

a = xrange(10) 
for x in a: 
    print(x) 

使用此。

7

沒有這樣的方法,並且不能將屬性添加到生成器。一個解決方法是創建一個包裝你的生成器的迭代器對象,並且包含一個'current'屬性。採取一個額外的步驟是將其用作發電機上的裝飾器。

這裏有一個實用裝飾類做的是:

class with_current(object): 

    def __init__(self, generator): 
     self.__gen = generator() 

    def __iter__(self): 
     return self 

    def __next__(self): 
     self.current = next(self.__gen) 
     return self.current 

    def __call__(self): 
     return self 

然後,您可以使用它像這樣:

@with_current 
def gen(): 
    x=range(0,100) 
    for i in x: 
     yield i 

a = gen() 

print(next(a)) 
print(next(a)) 
print(a.current) 

輸出:

0 
1 
1