• python迭代器、生成器、列表推倒式



     

    创建迭代器:

    iter( ): 创建迭代器

    next( ): 返回迭代器的下一个element(元素)

    实例题:

    >>> list = [1,2,3,4]

    >>> it = iter(list)#创建迭代器对象

    >>> print(next(it))#输出迭代器下一个元素(element

    ... 1

    >>> print(next(it))#输出迭代器下一个元素(element

    ...2

    迭代器可以使用常规 for 语句进行遍历:

    >>> list = [1,2,3,4]

    >>> it = iter(list)#创建迭代器对象

    >>> for x in it:

    print(x,end= ’’)#遍历输出迭代器对象内容(element

    ...1 2 3 4

    同样,也可以使用next()函数:

    >>> import sys

    >>> list = [1,2,3,4,5]

    >>> it = iter(list)#创建迭代器对象

    >>> while (True):

    print(next(it))#遍历输出迭代器同时引用 next( ) 函数

    ... 1 2 3 4 5

     

    生成器介绍:

    yield 实现斐波那契数列:

    >>> import sys

    >>> def fibonacci(n):#生成器函数 —— 斐波那契

    a,b,counter = 0 ,1 ,0

    while (True):

    if (counter > n):

    return

    yield a

    a,b = b,a+b

    counter += 1

    >>> f = fibonacci(10)#是一个迭代器,由生成器返回生成

    >>> while (True):

    print(next(f),end= ’’)

    ... 0 1 1 2 3 5 8 13 21 34 55

     


    迭代器:(iter() -- next())

    迭代器式访问集合元素的一种方式(迭代器是一个可以记住遍历的位置的对象)

    迭代器 对象从集合的第一个元素开始访问,直到所有元素遍历结束(迭代器不会退)

    迭代器协议:必须拥有iter方法和next方法

    迭代器的好处是:节省内存

    生成器:(yield())

    使用了 yield()的函数被称为生成器(generator

    生成器是一个返回迭代器的函数,只用于迭代操作

    在某种情况下,我们需要节省内存,就只能自己写,我们自己写的能实现迭代器的东西 称之为:生成器

    本质:迭代器:(自带了__iter__方法和__next__方法,不需要我们去实现)

    特点:惰性运算,开发者自定义

    列表推倒式:

    1- 把列表(list)解析的 [] 换成 ()得到的就是生成器表达式

    2- 列表解析与生成器表达式都是一种便利编程方式,只不过生成器表达式更节省内存

    3- python 不但使用迭代器协议,让 for 循环变得更加通用。大部分内置函数也是使 用迭代器协议访问对象的。(例如:sum 函数式python的内置函数,该函数使用迭代器 协议访问对象,而生成器实现了迭代器协议,所以我们可以直接计算一系列值得和。

    sum ( x** 2 for x in range(4) )

      而不用多此一举得先构造一个列表:

    sum ( [x**2 for x in range(4)] )

    小结:

    可迭代对象:

      ·拥有__iter__方法

      ·特点:惰性运算

      ·例如:range(),str,list,tuple,dict,set

    迭代器Iterator

       ·拥有__iter__方法和__next__方法、

    :iter(range()),iter(str),iter(list),iter(tuple),iter(dict),iter(set),reve rsed(list_o),map(func,list_o),filter(func,list_o),file_o

    生成器Generator

      ·本质:迭代器,所以拥有__iter__方法和__next__方法

      ·特点:惰性运算,开发者自定义

    使用生成器的优点

    延迟计算,一次返回一个结果。也就是说,他不会一次生成所有的结果,这对于大数据的处理,将会非常有用。

    # 列表解析

    sum ([i for i in range(100000000)])#内存占用大,机器容易卡死

    # 生成器表达式

    sum (i for i in range(100000000)])#几乎不占用内存


  • 相关阅读:
    jQuery的简单实用的25个知识点
    toDoList案例
    缓动动画函数的封装
    轮播图的设置:
    Django学习:cookie和session
    Django学习:ORM
    Django学习:中间件
    Django学习:url路由系统
    Django学习:模板继承和配置静态文件
    Django学习:模板语法
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10033579.html
Copyright © 2020-2023  润新知