生成器和迭代器

第一、  列表生成式    

1
l = [x*x for x in range(10)]

通过列表生成式可以快速从一个list推导出另外一个list(也就是说,我们获得了一个完整的列表)

但是由于内存的限制,列表容量肯定是有限的;如果列表元素很多(100万以上啥的),这样采用列表生成式可能会不符合现实需求。

如果能够按照某种算法推算出来的,就不用创建完整list,则产生生成器

  第二、生成器(generator): 是python中一边循环一边计算的机制。

            generator的创建方法1: 将列表生成式的[ ]变( )           

1
g = (x*x for x in range(10))

  这时候的g是个生成器,如何打印list的每个元素呢?

采用1:  next(g)

             也就是说每次调用next(g),就计算出g的下一个元素值,直到计算到最后一个元素。

采用2: 

1
2
for n in g:
      print(n)

     generator的创建方法2:在函数中定义包含yield的关键字

 

 

   第三、迭代器 ITERATOR

          可以直接作用于for循环的数据类型就是迭代对象(iterable)

         如:集合数据类型,包括list, tuple, dict, set, str等

                 generator,包括生成器和带yield的生成函数

         用isinstance()判断是否为迭代对象

       迭代器的概念: 可以被被next()函数调用,并不断返回下一个值的对象是迭代器

       用iter()函数将迭代对象变为迭代器

通过程序具体看下:

 这么看来,生成器和迭代器之间的区别是啥?

生成器是一种特殊的迭代器

posted @ 2020-04-26 17:32  lililili——  阅读(137)  评论(0)    收藏  举报