生成器实例问题
在看小甲鱼课程生成器的一节,课后题有题目:要求实现一个功能与reversed()相同的生成器:
例如:
>>>for i in myRev('FishC'):
print(i,end= ' ')
ChsiF
代码清单:
def myRev(data):
for index in range(len(data)-1,-1,-1):
yield data
我的问题是,在程序运行后,我们写入了for循环,但是原函数中已经包含了for循环。
这与我在生成器的上一节迭代器中做过的实例不一样。
在迭代器一节中,代码是这样的。
class MyRev():
def __init__(self,list_seq):
self.list_seq = list_seq
self.index = len(self.list_seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.list_seq
在这个class里面,并没有用到for循环。
求大佬解答有何区别! 本帖最后由 kogawananari 于 2020-12-1 11:41 编辑
可迭代对象__iter__()之后返回一个迭代器
可迭代对象生成的迭代器需要在__next__的代码里抛出StopIteration结束
惰性函数执行返回一个迭代器
惰性函数的代码不准抛出StopIteration 迭代器对象iter-> 迭代器
惰性函数执行-> 生成器
生成器就是一种迭代器
页:
[1]