• Python中的迭代器&生成器


    1. 迭代器

    1.1 迭代器

    • 迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代

    • 迭代器:帮助对某种对象(str/list/tuple类所创建的对象..)中的y元素一一获取.表象:具有__next__方法,每次迭代都返回一个值

      • 列表转换成迭代器:
        • lis = iter([1,2,4,2])
        • lis= [1,2,4,2]._ _ iter __()
      • 迭代器想要获取每个值就要反复调用:val = lis.__ next __()
        • 直到报错Stopinteration取到最后一个元素
      • 判断一个对象是否是迭代器:内部是否有__ next __方法.
      v1 = [11,22,33,44]
      
      # 列表转换成迭代器
      v2 = iter(v1)
      result1 = v2.__next__()
      print(result1)
      result2 = v2.__next__()
      print(result2)
      result3 = v2.__next__()
      print(result3)
      result4 = v2.__next__()
      print(result4)
      result5 = v2.__next__()
      print(result5)
      """
      # v1 = "alex"
      # v2 = iter(v1)
      # while True:
      #     try:
      #         val = v2.__next__()
      #         print(val)
      #     except Exception as e:
      #         break
      

    1.2 可迭代对象

    • 具有__inter__方法的就是可迭代对象,并且返回一个迭代器,才成为可迭代对象

      v1= [11,22,33,44]
      result= v1.__iter__()
      
    • 能被for循环的就是可迭代对象

    2.生成器

    • 函数中存在yield,那么该函数为生成器函数,调用生成器函数会返回一个生成器,生成器只有被for循环时,生成器函数内部的代码才会执行,每次驯化都会获取yield返回的值.
    • 基本格式:
    ##生成器函数存在yield
    def func(*args)
    	*args=1
        yield 1
        yield 2   
    func('a')
    #函数内部代码不会执行,返回一个生成器对象
    v = func('a')
    #生成器是可以被for循环,一旦开始循环name函数内部代码就会开始执行.
    for item in v:
        print(item)    #循环开始,函数运行,yield 返回值,停止第一次循环,再次循环时从上一次yield的位置开始运行
    
    • 生成数字:
      • return 可以做终止命令,不会返回值
    def func():
        count = 1
        while True:
            yield count
            count += 1
            
    val = func()
    
    for item in val:
        print(item)
    

    总结

    • 迭代器,对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个 __next__方法,用于以一个个获取数据。
    • 可迭代对象,可以被for循环且此类对象中都有 __iter__方法且要返回一个迭代器(生成器)。
    • 生成器,函数内部有yield则就是生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。
      • 生成器是特殊的迭代器(**):
  • 相关阅读:
    博客推荐
    2018
    2018
    学习推荐-Postgresql学习手册
    学习推荐-Redis学习手册
    odoo开发笔记 -- odoo源码解析
    前沿技术相关
    odoo开发笔记-tree列表视图拖拽排序
    odoo开发笔记-日期时间相关操作
    odoo开发笔记 -- 官方模块一览表
  • 原文地址:https://www.cnblogs.com/bigox/p/10738799.html
Copyright © 2020-2023  润新知