什么是生成器?

生成器的实质就是迭代器

在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循环,生成器具有惰性机制

生成器-yield初接触的更多相关文章

  1. 初接触BurpLoader工具

    初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...

  2. 软工实践练习-Git初接触

    第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...

  3. vi初接触

    vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...

  4. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  5. ExtJS初接触 - 在项目中使用ExtJS

    ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...

  6. Java之路——Java初接触

    本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...

  7. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

  8. PHP性能优化利器:生成器 yield理解

    如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...

  9. [PY3]——函数——生成器(yield关键字)

    函数—生成器篇 1. 认识和区分可迭代or生成器 1.1 可迭代对象 当你建立了一个列表,你可以逐项地读取这个列表,这叫做一个可迭代对象 当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代 ...

随机推荐

  1. 用java实现一个简易编译器1-词法解析入门

    本文对应代码下载地址为: http://download.csdn.net/detail/tyler_download/9435103 视频地址: http://v.youku.com/v_show/ ...

  2. CentOS install搭建SVN服务器

    安装步骤如下: 1.命令:yum install subversion 之后会打印很多消息,显示 Complete! 则完成. 2.查看 svn 版本:svnserve --version 3.创建S ...

  3. C#语法之泛型

    前面两篇C#语法主要是回顾委托相关的.这篇主要回顾了泛型. 一.为什么要有泛型? 我们在写一些方法时可能会方法名相同,参数类型不同的方法,这种叫做重载.如果只是因为参数类型不同里面做的业务逻辑都是相同 ...

  4. 安装ftp服务

    1.首先判断你服务器上是否安装了vsftpd 2.安装vsftpd 3.配置文件/etc/vsftpd/vsftpd.conf 禁止匿名用户登录,把YES改为NO,默认为YES 限制ftp用户跳出家目 ...

  5. C# 数据库增加新表怎么更新ef

    找到dbmx文件,打开,右键,更新模型 也可以 右键从模型中删除 重新更新过来,感觉说了句废话 哈哈

  6. 关于git远程版本库的一些问题之解决

    Part1:CentOS6.5免密码登录 修改/etc/ssh/sshd_config RSAAuthentication yesPubkeyAuthentication yesAuthorizedK ...

  7. 通过SourceTree连接SSL有问题的自建gitlab服务器

    我用的是 SourceTree 作为Git客户端的,用它连接一个HTTPS证书过期的自建git服务,会收到下面错误: abort: error: _ssl.c:507: error:14090086: ...

  8. 悟空模式-java-单例模式

    [那座山,正当顶上,有一块仙石.其石有三丈六尺五寸高,有二丈四尺围圆.三丈六尺五寸高,按周天三百六十五度:二丈四尺围圆,按政历二十四气.上有九窍八孔,按九宫八卦.四面更无树木遮阴,左右倒有芝兰相衬.盖 ...

  9. JVM之---垃圾回收

    JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存. 1.收集器 通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集 ...

  10. K:跳表

      跳表(SkipList)是一种随机化的数据结构,目前在redis和leveldb中都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表, 就能轻松实现一 ...