• python 3.x 学习笔记6 ( 迭代器 and 生成器 )


    1.迭代器(Iterator):
      可以被next()函数调用并不断返回下一个值的对象,成为迭代器:Iterator
      可以直接用于for 循环的对象统称为可迭代对象:Iterable

      迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。但是迭代器只能前进不能后退

    优点:
      使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

    2.生成器:
      只有调用时才会生成相应的数据,且只有一个__next__()方法

      如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

    创建方法:
      1)最简单的是把一个列表生成式的[]改成(),就创建了一个generator

      2)可以把函数变成generator object,只需要把print()改为yield 即可。


    3.

    yeild 作用:保存当前状态并返回
    send()作用:唤醒并传递一个值
    __next__()作用:只是唤醒


    4.

     生成器都是Iterator对象,但是list、低产田、str虽然是Iterable,却不是Iterator,把list、dict、str等Iterable变成Iterator可以使用iter()函数。

    5.通过yield将斐波那契函数变成生成器

     1 def fib(max):
     2     n,a,b = 0,0,1
     3     while n < max:
     4         yield b          #将函数变成生成器
     5         a,b = b,a+b        
     6         n += 1
     7     return 'lalalalal'
     8 
     9 f = fib(10)
    10 
    11 while True:
    12     try13         x = next(f)             #相当于执行一次函数fib()
    14         print(x)
    15     except StopIteration as e:
    16         print('Generator return value is %s '%e.value)   #e的value是函数返回值如fib函数的返回值'lalalalal'
    17         break
  • 相关阅读:
    日志处理
    md5加密
    os 模块
    time模块
    函数的进阶
    参数 返回值
    文件操作
    集合 拷贝
    linux如何更快的远程拷贝?scp,tar,rsync?
    修改内核临时端口范围
  • 原文地址:https://www.cnblogs.com/hsj-jingyu/p/8344027.html
Copyright © 2020-2023  润新知