在Python中,我可以像这样构建一个生成器:
def gen():
x=range(0,100)
for i in x:
yield i
我现在可以使用以下方法定义生成器的实例:
a=gen()
使用
从生成器中提取新值a.next()
但是有没有办法--- a.current()
---来获取发电机的当前值?
答案 0 :(得分:8)
没有这样的方法,您无法向生成器添加属性。解决方法是创建一个包装生成器的迭代器对象,并包含一个“当前”属性。另外一步是将它用作发电机上的装饰器。
这是一个实用程序装饰器类,它可以做到:
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
答案 1 :(得分:5)
您可以设置变量的值。
current_value = a.next()
然后使用current_value获取所有值。 Python经常在for语句中使用它
a = xrange(10)
for x in a:
print(x)
在这里,您将x定义为a的当前值。
答案 2 :(得分:0)
使用另一个全局变量存储当前值可能是可行的。
# Variable that store the current value of the generator
generator_current_val = None
def generator():
global generator_current_val # to set the current value
for i in range(10):
generator_current_val = i
yield i
a = generator()
print(next(a)) # 0
print(next(a)) # 1
print(next(a)) # 2
print(generator_current_val) # 2
print(next(a)) # 3