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中使用mongoengine操作MongoDB教程
Apr 24 Python
Django model反向关联名称的方法
Dec 15 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
python调用动态链接库的基本过程详解
Jun 19 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python super的使用方法及实例详解
Sep 25 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Pytorch之Variable的用法
Dec 31 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
python把一个字符串切开的实例方法
Sep 27 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
用PHP+MySql编写聊天室
2006/10/09 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
python冒泡排序算法的实现代码
2013/11/21 Python
Python显示进度条的方法
2014/09/20 Python
Python中分数的相关使用教程
2015/03/30 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
金智子午JAVA面试题
2015/09/04 面试题
自我评价如何写好?
2014/01/05 职场文书
大学生最新职业生涯规划书范文
2014/01/12 职场文书
文明教师事迹材料
2014/01/16 职场文书
文明礼仪标语
2014/06/13 职场文书
教师演讲稿开场白
2014/08/25 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
2016继续教育研修日志
2015/11/13 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技