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 27 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
python获取中文字符串长度的方法
Nov 14 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
python常用运维脚本实例小结
Feb 14 Python
python MD5加密的示例
Oct 19 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
优化Jquery,提升网页加载速度
2013/11/14 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python+flask实现API的方法
2018/11/21 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
金融专业推荐信
2013/11/14 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
繁星春水读书笔记
2015/06/30 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书