在Python我可以建立一個發電機,像這樣:電流產生的價值
def gen():
x=range(0,100)
for i in x:
yield i
我現在可以使用定義生成器的實例:
a=gen()
,並使用來自發電機拉新值
a.next()
但是有沒有辦法--- a.current()
---得到發電機的當前值?
在Python我可以建立一個發電機,像這樣:電流產生的價值
def gen():
x=range(0,100)
for i in x:
yield i
我現在可以使用定義生成器的實例:
a=gen()
,並使用來自發電機拉新值
a.next()
但是有沒有辦法--- a.current()
---得到發電機的當前值?
您可以設置變量的值。
current_value = a.next()
然後使用current_value來表示所有值。 的Python經常在這裏給您x限定爲的當前值報表
a = xrange(10)
for x in a:
print(x)
使用此。
沒有這樣的方法,並且不能將屬性添加到生成器。一個解決方法是創建一個包裝你的生成器的迭代器對象,並且包含一個'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