生成器
Posted yangjinquan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器相关的知识,希望对你有一定的参考价值。
一 、什么是生成器:
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,(其他的数据类型需要调用自己的__iter__方法),所以生成器就是可迭代对象。
生成器的分类和表达形式特点(Python有两种不同方式的生成器)
1、生成器函数:常规函数定义,但是,使用yield语句二不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,
挂起函数的状态,以便磁材从它离开的地方继续执行
2.生成器表达式:类似于列表的推导,生成器返回按需求生产结果的一个对象,而不是一次构建一个结果列表o
为何使用生成器之生成器的优点:
Python使用生成器对延迟操作提供支持,所谓延迟,是指在需要的时候才产生结果,而不是立即生产将结果,这也是生成器的主要好处
生成器小结:
1、是可迭代对象
2、实现了计算的延迟,省内存空间
3、生成器本质和其他的数据内省一样,都是实现了迭代协议,只不过生成器附加了一个延迟计算省内存空间的好粗,其余的可迭代对象可有这点好处
二、普通函数和生成器的区别?
1、普通函数
def show():#普通的函数 return ‘普通的函数‘ res1 = show() print(res1)
2、生成器函数
def test():#generator object test at 0x000001CB7C9CCFC0> 关键字 generator:生成器 yield ‘yield 生成器‘ yield 1 yield 2 res = test() print(res) print(res.__next__()) #yield 生成器 print(res.__next__()) #1 print(res.__next__()) #2
总结:普通函数和生成器函数的返回值 关键字使用的不一样。一个是“return” 和 “yield”。生成器还能执行next()方法
二、
三元表达式:
name = ‘yjq‘ #‘sb‘ if name == ‘yjq‘ 如果为true 即返回帅哥 else ‘sb‘ 为假返回 sb‘ res_1 = ‘帅哥‘ if name == ‘yjq‘else ‘sb‘ print(res_1)
生成器表达式:
#生成器表达式 resault = (k for k in range(10)) #<generator object <genexpr> at 0x000002492DDC16D0> print(resault) print(resault.__next__())
以上是关于生成器的主要内容,如果未能解决你的问题,请参考以下文章