• 十二、迭代器,生成器,for循环原理


        一.迭代器:                            
       迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果
        迭代器:迭代取值的工具
        迭代器给你提供了一种不依赖于索引取值的方式
        基本数据类型中可迭代对象的有:
    
            str list tuple dict set
            文件对象(执行内置的__iter__之后还是本身 没有任何变化):文件对象本身就是迭代器对象
    
      s = 'hello'
      l = [1,2,34,]
      t = (1,2,34)
      s1 = {1,2,3,4}
      d = {'name':'jason'}
      f1 = open('xxx.txt','w',encoding='utf-8')  # 文件类型不需要
      res1 =iter(s) # 变成迭代器对象
      res2 =iter(t) # 变成迭代器对象
      迭代器取值:
       print(res.__next__())  # 取值
       print(res.__next__())
       print(res.__next__())
    
        1.只能往后依次取 不能后退
       2.
        ps:迭代器一定是可迭代对象
        而可迭代对象不一定是迭代器对象

    二、for循环的基本原理                          

     

       for循环内部本质:1.将in后面的对象调用__iter__转换成迭代对象
    
        2.调用__next__迭代取值
    
        3.内部有异常捕获Stopteration,当__next__报这个错,自动结束循环
    
     如:d = {"name":"jasoon","password":"123","hobby":"read"}
    
       for i in d :
    
        print(i)
    
    for 循环后面的in跟一个可迭代对象,转换成迭代器对象,然后调用__next__取值,再捕获异常
    三、生成器                              
    # 1.生成器的定义:用户自定义的迭代器,本质就是迭代器。
    # 2.函数内部有一个yield关键字,加括号执行函数并不会触发函数体代码的运行
    # 3.yield可以返回一个和多个值,多个已元组方式返回
    # 4.生成器初始化中,g=func(),函数变成迭代器,已一个yield为节点,依次迭代,执行第二次迭代器,运行第一个yield下面代码,到第二个yield结束
        # def func():
    #     print('first')
    #     yield  666 
    #     print('second')
    #     yield  777
    #     print('third')
    #     yield  888
    #     print('forth')
    #     yield
    #     yield
    
    # print(g)
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # 自定义一个range
    def my_range(start,end,step=1):
        while start < end:
            yield start
            start += step
    
    
    for j in my_range(1,100,2):
        print(j)

    四、生成器的表达式                      

    # res = (i for i in range(1,100000000) if i != 4)  # 生成器表达式
    # print(list(res))
    #
    # """
    # 生成器不会主动执行任何一行代码
    # 必须通过__next__触发代码的运行
    # """
    # print(res.__next__())
    # print(res.__next__())
    # print(res.__next__())
    # print(res.__next__())
    
    

    五、内置函数

    
    
  • 相关阅读:
    WinForm 资源文件的使用
    php 常量
    netbean使用技巧
    netbeans 7安装xdebug调试php程序
    eclipse 开发技巧
    asp.net 获取客户机IP地址
    NameValueCollection详解
    Paramics插件编程进程间通讯
    Paramics API编程配置
    windows查询端口占用
  • 原文地址:https://www.cnblogs.com/wukai66/p/11190225.html
Copyright © 2020-2023  润新知