Python 生成器推导式

趁刚总结的列表推导式还热乎,来看看生成器推导式。
有需要了解列表推导式的小伙伴可以去看之前我的总结Python列表推导式

一.列表推导式VS生成器推导式

1.从形式上看,生成器推导式与列表推导式非常接近,只是生成器推导式使用圆括号而不是列表推导式所使用的方括号。
2.与列表推导式不同的是,生成器推导式的结果是一个生成器对象,而不是列表,也不是元祖。但使用生成器对象的元素时,可以根据需要将其根据需要转化为列表或者元祖。

二.生成器推导式 starting…

废话不多说,直接以实例说明>>
1.创建生成器推导式

>>> g = ((i+2)**2 for i in range(10))
>>> g
<generator object <genexpr> at 0x000001CA569C5AC8>

这样看来,生成器推导式创建时只不过将列表推导式的方括号改为圆括号即可(就这 ???当然不,接着往下看嘛 )
2.根据需要将创建好的生成器对象转化为列表或元祖

>>> g = ((i+2)**2 for i in range(10))
>>> g
<generator object <genexpr> at 0x000001CA569C5AC8>
>>> list(g)#将生成器对象转化为列表
[4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
>>> tuple(g)#将生成器对象转化为元祖
()#为什么是空的??!看下面总结

关于惰性求值
1.是什么:惰性求值(Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need)。
2.为什么:使用惰性求值的目的是要最小化计算机要做的工作。eg:生成器推导式是继列表推导式后的Python推导式,比列表推导式速度快,占内存少。
3.特点:不管用什么方法访问元素,当所有元素访问结束后,立马清空生成器对象。如果需要重新访问其中的元素,必须重新创建该生成器对象。

3.遍历生成器对象中的元素

>>> g = ((i+2)**2 for i in range(10))
>>> print(g.__next__())#使用生成器对象__next__()方法获取元素
4
>>> print(g.__next__())
9
>>> print(next(g))#使用内置函数next()方法获取生成器对象中的元素
16
>>> print(next(g))
25
#-----使用循环直接遍历生成器对象中的元素-------
g = ((i+2)**2 for i in range(10))
for item in g:print(item,end = ' ')

4.包含yield语句的函数可用来创建可迭代的生成器对象
通过一个例子体会:

def f():a,b = 1,1#序列解包,同时为多个元素赋值while True:yield a#暂停执行,需要时再产生一个新元素a,b = b,a+b#序列解包,继续生成新元素
a = f()#创建生成器对象
for i in range(10):#斐波那契数列中前十个元素print(a.__next__(),end = ' ')#结果:1 1 2 3 5 8 13 21 34 55
for i in f():if i > 100:#斐波那契数列中第一个大于100的元素print(i)#结果:144break
a = f()
print(next(a))#使用内置函数next()获取生成器对象中的元素
print(next(a))#每次获取新元素时,由yield语句生成
print(next(a))
#结果:
1
1
2

注:关于yield关键字
1.yield作为Python33个关键字之一,在生成器函数中用来返回值。Python33个关键字
2.可以把yield看做return,只不过return的作用是在程序中返回某个值,返回之后程序就不再往下运行了。而使用yield的函数是一个生成器,不仅仅是一个简单的函数。
3.可以将yield理解为:暂停执行需要时再产生一个新元素。也就是说,yield扮演的也是返回的角色,但并不意味着yield返回就结束了整个程序,仅仅是暂停,下次需要时再出现。

Python生成器推导式相关推荐

  1. python生成器推导式的结果是一个什么类似于对象_python 生成器和推导式

    一. 生成器 什么是生成器. 生成器实质就是迭代器. 在python中有三种方式来获取生成器: 1. 通过生成器函数 2. 通过各种推导式来实现生成器 3. 通过数据的转换也可以获取生成器 首先, 我 ...

  2. python 生成器推导式

    # 生成器 generator 用yield来返回数据 def reverse(data):for i in range(len(data) - 1, -1, -1): # range(start, ...

  3. python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式

    python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...

  4. Python入门 推导式 ! 解释:生成器表达式和列表推导式的区别

    Python 入门之 推导式 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895,817, 687 有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家 ...

  5. Python学习day12(生成器,列表/生成器推导式)

    Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...

  6. 微课|玩转Python轻松过二级(3.2节):元组与生成器推导式

    适用教材: 董付国.<玩转Python轻松过二级>.清华大学出版社,2018. 第3章  详解Python序列结构 3.2  元组与生成器推导式 3.2.1  元组创建与元素访问 3.2. ...

  7. 微课|中学生可以这样学Python(5.6.2节):生成器推导式

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第5章  Python序列及应用 5.6.2  生成器推导式 京东购买链接:https://ite ...

  8. 【技能树共建】Python 列表推导式

    Python 列表推导式是什么 列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式, 它在 Python 中用于 转换 和 过滤 数据. 其语法格 ...

  9. python之推导式

    1. 列表推导式 推导式是最常应用迭代协议的环境之一.推导式是另外一种将for循环,if表达式以及赋值语句放在一个单一语句中的一种方法. 举个例子,我们需要将一个输入列表中所有偶数元素除以2生成一个新 ...

最新文章

  1. Java项目:企业员工绩效工资管理系统(java+SpringBoot+FreeMarker+Mysql)
  2. 按钮点击WIN8 磁贴效果
  3. 安装cuda时出现 non 7z achive. 报错解决办法 安装文件损坏
  4. b插到元素a之前python_python之路_前端基础之jQuery入门3
  5. 历史上的今天(history)+ 勇者斗恶龙(dragon)
  6. win8改win7 教程
  7. 【CodeForces - 514D】R2D2 and Droid Army(二分+滑动窗口ST表,或 尺取+单调队列或STLmultiset)
  8. pytorch 图像分割的交并比_「通知」《深度学习之图像识别》再版工作启动,欢迎指导和提建议...
  9. nvidia-smi 命令详解
  10. 续——《RedHat/Fedora等非ubuntu的Linux系统星空极速netkeeper拨号上网 》
  11. python-描述符基本
  12. 【2019/3/23】周进度报告
  13. pp助手|pp助手下载
  14. 强化学习 Q学习原理及例子(离散)附matlab程序
  15. 如何查计算机上网找网络协议,怎么查看电脑网络协议
  16. 图相似度模型(论文篇)
  17. FFT:快速傅里叶变换与高精度乘法
  18. tomcat加大内存配置
  19. C++基础---三目运算符
  20. 使用“已知明文攻击”破解加密

热门文章

  1. 学人工智能需要什么配置的电脑?AI电脑配置需求
  2. vue实现单选做题根据对错标色,作对跳转下一题,实现思路详解
  3. java计算机毕业设计汽车售后服务信息管理系统的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
  4. [LeetCode]844. Backspace String Compare 解题报告(C++)
  5. uni-app项目使用多语言切换功能
  6. 将两个iso镜像刻录到一张dvd光盘上,当然是做系统启动盘用
  7. android 带刻度的滑动条_Android实现滑动刻度尺效果
  8. 实验电子商城 mvc设计思想简介
  9. python .py文件转exe和更换图标
  10. WSL与WIN怎么互通有无?