CarterZhang 发表于 2020-12-1 10:53:15

生成器实例问题

在看小甲鱼课程生成器的一节,课后题有题目:
要求实现一个功能与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:39:36

本帖最后由 kogawananari 于 2020-12-1 11:41 编辑

可迭代对象__iter__()之后返回一个迭代器
可迭代对象生成的迭代器需要在__next__的代码里抛出StopIteration结束

惰性函数执行返回一个迭代器
惰性函数的代码不准抛出StopIteration

kogawananari 发表于 2020-12-1 11:45:19

迭代器对象iter-> 迭代器

惰性函数执行-> 生成器

生成器就是一种迭代器
页: [1]
查看完整版本: 生成器实例问题