python 生成器需注意的小问题


Posted in Python onSeptember 29, 2020

在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题。

def generator_test1():
 # 0...9 generator
 x = (i for i in range(10))
 # 5..9 generator
 x_filter = filter(lambda y: y >= 5, x)
 # first use the x
 L = list(x)
 print("L, x", L)
 # then use x_filter
 l = list(x_filter)
 print("l, x_filter", l)
 
 
if __name__ == "__main__":
 generator_test1()

输出结果为:

L, x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l, x_filter []

上述代码中,x_filter是基于生成器x构建的生成器,但是由于x在x_filter使用之前先被用掉了,所以在使用x_filter的时候,才去获取x的值,而此时x已经用完了,最终导致x_filter转化成的列表是空的。

def generator_test2():
 x = (i for i in range(10))
 for i in range(10):
  x = (j + i for j in x)
 L = list(x)
 print("L, x", L)
 
if __name__ == "__main__":
 generator_test2()

输出结果:

L, x [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 

上述代码中,每次循环都基于原先的生成器构建一个新的生成器,由于并未使用,所以生成器x中的i并没有被赋值。在后面转化成列表的时候才去获取i的值,而此时由于i为9,所以所有的生成器x的i都为9,原始的x是0到9的生成器,接下来的10个生成器每个都在原始值上加9,导致每个值都增大了90。下面是此例的一个变体:

def generator_test3():
 x = (i for i in range(10))
 for i in range(10):
  x = (j + i for j in x)
 i = 20
 L = list(x)
 print("L, x", L)
 
if __name__ == "__main__":
 generator_test3()

输出结果:

L, x [200, 201, 202, 203, 204, 205, 206, 207, 208, 209]

以上就是python 生成器需注意的小问题的详细内容,更多关于python 生成器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Pandas标记删除重复记录的方法
Apr 08 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Pandas分组与排序的实现
Jul 23 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
python实现自动化群控的步骤
Apr 11 Python
python 两种方法删除空文件夹
Sep 29 #Python
如何使用python写截屏小工具
Sep 29 #Python
python如何调用百度识图api
Sep 29 #Python
Python 串口通信的实现
Sep 29 #Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 #Python
详解python对象之间的交互
Sep 29 #Python
python PIL模块的基本使用
Sep 29 #Python
You might like
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
php session的应用详细介绍
2017/03/22 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
python如何停止递归
2020/09/09 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
学校食品安全实施方案
2014/06/14 职场文书
个人整改方案范文
2014/10/25 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年村官工作总结
2014/11/24 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL