[英]python generators in a class
我想创建一个类,该类具有一个类似于生成器的方法。 我对发电机还很陌生。 这是我的代码:
class MyGen:
def __init__(self):
self.a = 0
def create_generator(self):
yield self.a
self.a += 1
if __name__ == "__main__":
myGenInstance = MyGen()
myGen = myGenInstance.create_generator()
for i in range(3):
print(next(myGen))
我收到此错误:
Traceback (most recent call last):
0
File "C:/Users/tvavr/PycharmProjects/filter/geneŕator_test.py", line 17, in <module>
print(next(myGen))
StopIteration
Process finished with exit code 1
我想念什么?
读取代码时,没有错误,并且python引发的异常是正常现象。
create_generator
方法只能产生一个值,因为仅使用了一个产量。
考虑到:
class Mygen:
def __init__(self):
self.a = 0
def create_generator(self):
yield self.a
self.a += 1
yield self.a
self.a += 1
yield self.a
当您按照以下方式运行代码时,请注意发生了什么:
if __name__ == "__main__":
my_gen_instance = MyGen()
my_gen = my_gen_instance.create_generator()
for i in range(3):
print('the value number', i, 'is:', next(myGen))
输出将是:
the value number 0 is 0
the value number 1 is 1
the value number 2 is 2
现在,如果我们将范围从3更改为4,看看会发生什么:
if __name__ == "__main__":
my_gen_instance = MyGen()
my_gen = my_gen_instance.create_generator()
for i in range(4):
print('the value number', i, 'is:', next(myGen))
输出将是:
the value number 0 is 0
the value number 1 is 1
the value number 2 is 2
Traceback (most recent call last):
File "pygen.py", line 21, in <module>
print('the value number', i, 'is', next(my_gen))
StopIteration
因为generator是特殊类型的迭代器,所以它们像普通迭代器一样用尽时会抛出StopIteration
因此,为了避免必须通过包含所需的尽可能多的收益来预期这种行为,最好的方法是在MyGen类内创建无限生成器,如下所示:
class MyGen:
def __init__(self):
self.a = 0
def create_generator(self):
while True:
yield self.a
self.a += 1
现在,您可以根据需要对这个方法创建的生成器进行尽可能多的迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.