• 迭代器和生成器


    迭代器和生成器

    知识点补充:类和对象

    • int str list ----类
    • 由类创建的的东西叫做对象

    迭代器

    • 定义:对某对象(str/list/tuple/dict/set)【序列】【可迭代对象】中的元素进行逐一获取

    • 在对字典进行迭代时,只对其键进行迭代

    • 从列表中循环每一个元素

      v1 = [11,22,33,44]
      v2 = iter(v1) #v1是迭代器
      #或者
      v2 = v1.__iter__()
      while True:
          try:
              val = v2.__next__()#每次可迭代一个
              print(val)
          except Exception as e: #如果有异常
              break
      
    • 如何判断一个对象是否为迭代器:1.内部是否有__next__方法 2.利用type( )函数

    • for循环内部就是迭代器

    可迭代对象

    • 可迭代对象的标记:

      • 1.可以被for循环的 2. 内部有__iter__方法且返回一个迭代器

    生成器

    # 生成器函数(内部是否包含yield)
    def func():
        print('f1')
        yield 1
        print('f2')
        yield 2
        print('f3')
        yield 100
        print('f4')
    # 函数内部代码不会执行,返回一个生成器对象
    v1 = func() #函数不执行
    #生成器是可以被for循环的,一旦开始循环那么函数内部代码就开始执行
    for item in v1:
        print(item)
    
    • 利用生成器生成1到10万

      def func():
          count = 1
          while True:
              yield count
              count += 1
              if count = 100000:
                  return
      val = func()
      for i in val:
          print(i)
          #或者
          if i >= 100000:
              break
      #优点边做边用
      
    • 每次循环都会获得yield的返回值

      def func():
          return 2
          yield 1
      a = func()
      print(a)
      
    • 只要yield存在就是生成器

    练习题

    • 分行读取文件的内容

      def func():
          cursor = 0
          while True:
              f = open('db','r',encoding = 'utf-8')
              f.seek(cursor)
              data_list = []
              for i in range(10):
                  line = f.readline()
                  if not line:
                      return
                  data_list.append(line)
              cursor = f.tell()
              f.close()
      
              for rew in data_list:
                  yield rew
      
      for item in func():
          print(item)
      

    补充:

    • 生成器还一种特殊的迭代器,也是一种特殊的可迭代对象
  • 相关阅读:
    NGUI UIEventListener
    Unity3d NGUI Panel 滑动菜单
    NGUI 密码输入框
    Unity3d 时间差
    Unity3d 添加组件脚本和建菜单
    c# [HideInInspector] 属性
    c# [System.Serializable]
    Activity 生命周期
    Unity3d OnApplicationPause与OnApplicationFocus
    C# 中 Struct 与 Class 的区别
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13507350.html
Copyright © 2020-2023  润新知