Python_Mix*生成器,生成器函数,推导式,生成器表达式
2024-08-24 21:03:36
- 生成器:
- 生成器的本质就是迭代器
- 生成器一般由生成器函数或者生成器表达式来创建,其实就是手写的迭代器
def func():
print('abc')
yield 222 #由于函数中有了yield ret = func()
print(ret) #我们执行函数的时候实际上是获取生成器 结果:
<generator object func at 0x10567ff68>
这个叫func的生成器的内存地址0x10567ff68- 在Python中可以通过三种方式来获取生成器:
- 1.通过生成器函数
- 2.通过各种推导式来实现生成器
- 3.通过数据的转换也可以获取生成器
- yield:
- 将函数中的return换成yield就是生成器,由于函数中存在了yield,我们再执行这个函数的时候就不再是函数的执行了,而是获取这个生成器.
- return和yield的区别:
- yield是分段来执行一个函数,return是直接停止执行函数.
- 特点:
- 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__( ),send( ):给上一个yield传值)
- 在Python中可以通过三种方式来获取生成器:
- 生成器函数:
- 和普通函数没有区别,里面有yield的函数就是生成器函数
- 生成器函数在执行的时候,默认不会执行函数体,返回生成器
- 通过生成器的__next__( )分段执行这个函数
- send( )给上一个yield传值,不能在开头(因为没有上一个yiel),最后一个yield也不可以用send(因为没有下一个yield)
def eat():
print('吃什么呢')
a = yield '馒头'
print('a=',a)
b = yield '面条'
print('b=',b)
c = yield '水果'
print('c=',c)
yield '安排一下!'
eats = eat() #获取生成器
ret1 = eats.__next__()
print(ret1)
ret2 = eats.send('胡辣汤')
print(ret2)
ret3 = eats.send('冰激凌')
print(ret3)
ret4 = eats.send('蛋挞')
print(ret4)- 推导式:
- 1)列表推导式[结果 for循环 条件筛选]
- 2)字典推导式{结果 for循环 条件筛选}
- 3)集合推导式{key for循环 条件}
- 生成器表达式
- (结果 for循环 条件)
- 特点:
- 1.惰性机制
- 2.只能向前
- 3.节省内存
最新文章
- 5-4 bash脚本编程之三 条件判断及算术运算
- eclipse中SSH三大框架环境搭建<;二>;
- regsvr32的使用
- 2016030201 - github上创建项目
- 什么要缓存curl资源
- [置顶] Firefox OS 学习——Gaia 编译分析
- python查看模块及相关函数帮助
- Android url中文编码问题
- (hdu step 6.3.5)Card Game Cheater(匹配的最大数:a与b打牌,问b赢a多少次)
- 【PHP】最详细PHP从入门到精通(三)——PHP中的数组
- 调用js中文乱码
- ●洛谷P2606 [ZJOI2010]排列计数
- 实例演示如何在spring4.2.2中集成hibernate5.0.2并创建sessionFactory
- SLAM+语音机器人DIY系列:(三)感知与大脑——2.带自校准九轴数据融合IMU惯性传感器
- Scala模式匹配| 隐式转换
- MAC OS 更新GIT版本时遇到的问题
- Golang &#27491;&#21017;&#34920;&#36798;&#24335;Regex&#30456;&#20851;&#36164;&#26009;&#25972;&#29702;
- vue实例相关
- webpack 配置 publicPath的理解
- IntelliJ IDEA创建maven多模块项目