• 生成器-yield初接触


    什么是生成器?

    生成器的实质就是迭代器

    在python中有三种方式来获取生成器

      1. 通过生成器函数

      2. 通过各种推导式实现生成器

      3. 通过数据的转换也可以获取生成器

    将函数中的return换成yield就是生成器

    运行的结果是不一样的,由于函数中存在了yield,那么这个函数就是一个生成器函数,这个时候,我们再执行这个函数的时候,就不再是函数的执行了,而是获取这个生成器.如果使用呢?想想迭代器,生成器的本质就是迭代器,所以,我们可以直接执行__next__()来执行以下生成器.

    那么我们可以看到,yield和return的效果是一样的,有什么区别呢? 

     yield是分段来执行一个函数,return 呢? 直接停止执行函数

    我们来看看send方法,send和__next__()一样都可以让生成器执行到下一个yield.

    send 和 __next__() 的区别:

      1. send和next() 都是让生成器向下走一次

      2. send 可以给上一个yield的位置传递值,不能给最后一个yield发送至.在第一次执行生成器代码的时候不能使用send()

    生成器可以使用for循环来获取内部的元素

     列表推导式,生成器表达式以及其他推导式

    列表推导式的常用方法:

      [结果 for 变量 in 可迭代对象]

    筛选模式:

      [结果 for 变量 in 可迭代对象  if  条件]

     生成器表达式和列表推导式的语法基本上是一样的,只是把[] 替换成()

     生成器表达式和列表推导式的区别:

      1. 列表推导式比较耗内存,一次性加载,生成器表达式几乎不占用内存,使用的时候才分配和使用内存

      2. 得到的值不一样,列表推导式得到的是一个列表,生成器表达式获取的是一个生成器

    生成器的惰性机制--------> 生成器只有在访问的时候才取值,说白了,你找他要他才会给你,不找他要,它是不会执行的

     字典推导式--------集合推导式

    一一有其特征

    所以,推导式有: 列表推导式, 字典推导式, 集合推导式,没有元组推导式

    生成器表达式:  (结果  for 变量 in 可迭代对象 if 条件筛选)

    生成器表达式可以直接获取到生成器对象,生成器对象可以直接进行for循环,生成器具有惰性机制

  • 相关阅读:
    第一课:人人站安装与使用教程
    linux 多个python版本的切换
    参考文章
    windows下scrapy 的安装
    vi 使用入门
    linux 源码安装
    C语言—第二次作业
    C语言第0次作业
    c语言博客园作业03函数
    tomcat对于web.xml的securityconstraint使用的处理机制
  • 原文地址:https://www.cnblogs.com/ALADL/p/9329167.html
Copyright © 2020-2023  润新知