• 生成器,迭代器


    生成器函数

      一个函数带着yield就是生成器函数
    
      调用之后不执行,需要next来触发这个函数继续向下执行
    
      一个函数中可以多个yield
    
      生成器函数得到的是一个生成器
    
      启动生成器第一个方法永远是next

    生成器函数和其他函数的区别

      生成器函数和其他函数[本质上]我们得到的结果是相同的
    
      只不过中间过程不同
    
      普通函数 必须得到所有结果之后才返回
    
      生成器函数 可以一边计算结果一边返回

    生成器

      生成器的本质可就是迭代器  
    
      在生成器中 通过next取到的值才是yield的返回值

    生成器函数有什么特点

      调用的时候不执行
    
      返回一个生成器/迭代器
    
      从生成器中取值的方式和迭代器一样
    
    生成器函数中 
    
      send/__next__ 生成器函数之外用的
    
      yield/yield from生成器函数之内用的
    
      next+send==yield
    
      如果函数中的yield要接受参数,那么应该使用send传值
    
      如果函数中的yield不需要接受参数,那么应该使用next
    
      生成器和迭代器都是一样的 ,内部的值都只能取一次
    
      从生成器中取值的方式也和迭代器是一样的:  
    
          for 
    
          next/send
    
          数据类型的强制转换(list8)

     迭代器

      iter 迭代
    
      iterable 可迭代
    
      整数类型是不可迭代的
    
      dir函数是查看一个数据类型内部含有哪些方法
    
       两边带着双下划线的方法就叫做'魔术方法''双下方法''内置方法'
    
      可迭代协议:只要含有__iter__方法的数据类型都是可以迭代的
    
      可迭代的都可以使用for循环

    检查某个变量/值 是不是可迭代的呢

      1.print('__iter__'in dir([]))

      2form collection import Iterable

        print(isinstance([],iterable))

    迭代器的作用;

      节省空间

      for循环就是利用了迭代器节省内存的特点来对Python当中的变量来进行操作

    res=[1,2,3,4]
    
    print(res.__length__())  查看迭代器中有多少个元素
    
    print(res.__setstate__() 控制迭代器从哪开始迭代
    
    print(res.__next__())  从迭代器中取下一个值

    for 循环一个列表的时候必须用的

      __next__  取下一个值

    迭代器协议:

      内部含有__next__ 和__iter__ 的方法的值变量都是迭代器

    如何让创建一个迭代器

      可迭代变量.__iter__()    返回一个迭代器

    迭代器的特点:(节省内存,惰性运算,一次性取值只能按顺序取)

      具有next和iter 方法

      通过一个next多次执行就可以获得所有这个容器中的值

      迭代器中的值只能取一次

      不能取的时候不出现

    for循环取值

      第一种  for

      第二种 next

      第三种 数据类型的类型转换

      for循环内部的机制就是迭代器取值的机制

      在for循环执行过程中:先把可迭代的变成一个迭代器,然后只在丛中一个一个的取值

    for循环和可迭代的关系

      所有的迭代器都是可迭代的

      迭代器都是特殊的存在

    for循环和迭代器的关系

      无论是可迭代的还是迭代器都可以被for循环

      如果直接循环迭代器,那么循环一次就没有了

      如果循环的是飞迭代器,那么每一次循环相当于从头到尾的循环

    range生成的就是迭代器 创建这个迭代器并不会真的吧迭代器中的所有数据一次性生成

    什么时候生成呢?

      只有通过next取值的时候才会生成

    记住你要多少个值,当前该给你什么,并且记住我下一个该给你什么,下一个个当前这个数的关系

      

      

  • 相关阅读:
    vue 项目界面绘制_stylus_iconfont_swiper
    react_结合 redux
    BOM 浏览器对象模型_当前窗口的浏览历史 history 对象
    BOM 浏览器对象模型_Storage 接口
    react_app 项目开发 (9)_数据可视化 ECharts
    react_app 项目开发 (8)_角色管理_用户管理----权限管理 ---- shouldComponentUpdate
    BOM 浏览器对象模型_同源限制
    面试题: 多个 await 处理,有一个失败,就算作失败
    react_app 项目开发 (7)_难点集合
    react_app 项目开发_遇到的坑
  • 原文地址:https://www.cnblogs.com/z1115230598/p/9917209.html
Copyright © 2020-2023  润新知