生成器-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循环,生成器具有惰性机制
生成器-yield初接触的更多相关文章
- 初接触BurpLoader工具
初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...
- 软工实践练习-Git初接触
第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...
- vi初接触
vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...
- ExtJS初接触 —— 了解 Ext Core
ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...
- ExtJS初接触 - 在项目中使用ExtJS
ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...
- Java之路——Java初接触
本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...
- Python入门之迭代器/生成器/yield的表达方式/面向过程编程
本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...
- PHP性能优化利器:生成器 yield理解
如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...
- [PY3]——函数——生成器(yield关键字)
函数—生成器篇 1. 认识和区分可迭代or生成器 1.1 可迭代对象 当你建立了一个列表,你可以逐项地读取这个列表,这叫做一个可迭代对象 当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代 ...
随机推荐
- 从weblogic的一个教训
部署后一定要检查解压后的文件是否修改了.常常出现部署中存在缓存的情况. weblogic8.1可能出现没有删除缓存情况.血的教训.
- nginx对nodejs服务器的http、https、ws、wss的配置
最新nginx对nodejs服务器的http.https.ws.wss的配置 Linux下nginx配置nodejs服务器 目录 目录 软件版本 话不多说上干货 静态资源配置 反向代理配置 因为 ...
- chown -R 用户名:组名 ./ 及 chown用法介绍
当我们在不通过yum(CentOS).apt-get(Ubuntu)来安装MySQL的时候,通常执行以下命令来改变目录的拥有者: [root@localhost ~]# chown -R mysql: ...
- stream was not readable.
StreamWriter使用时的报错情况: stream was not readable. 错误原因: 没有指定StreamWriter的写入文件 正确代码示例1: byte[] businessD ...
- js中的深浅拷贝
js中的深浅拷贝 js中有深拷贝.浅拷贝一说,所谓的深浅拷贝是针对value类型为引用类型(函数.对象.数组)而言的,大概理解的就是: 浅拷贝: 拷贝出的对象c和原始对象o,c和o在key对应的val ...
- xmpp实现的即时通讯聊天(二)
参考网址:http://www.jianshu.com/p/8894a5a71b70 借图描述原理: 三.注册.登陆.聊天功能的实现 故事板如下: 四个类如下: 不喜多言,直接上Demo: Login ...
- 表示层设计模式:Intercepting Filter(截取筛选器)模式
上下文 问题 影响因素 解决方案 变体 示例 结果上下文 相关模式 致谢 上下文 对于任何一个曾经从头建立 Web 应用程序的人来说,他们都会有这样的体会:这项任务所需要的独立完成 ...
- java中对JVM的深度解析、调优工具、垃圾回收
jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...
- 由表生成代码:mybatis-generator入门
application.properties ## mapper xml 文件地址 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml ##数 ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...