概述
生成器[generater]
- 生成器
- 定义生成器
- 和推导式的区别
- 使用
- 生成器的四个方法
生成器
定义生成器
- 使用yield关键字
def generate_one(list_num): for i in list_num: yield i * i
- 使用圆括号
v2 = (i * i for i in range(6))
和推导式的区别
生成器表达式不会创建序列形式的对象,不会把所有的值都读取到内存中,而是会创建一个通过迭代并按照需求生成值的生成器对象(Generator)。
- 也就是说占用内存很小 如果使用较大数据推荐使用生成器
使用
- 可使用next()函数 但超出会报StopIteration错误
v1 = generate_one([1, 2, 3, 4, 5]) print(next(v1))
- 其中每次next都会去找下一个元素 如果没有就会报错
生成器函数返回生成器。要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,其中一个就是__next__()。
每当生成器被调用的时候,它会返回一个值给调用者。在生成器内部使用yield来完成这个动作。为了记住yield到底干了什么,最简单的方法是把它当作专门给生成器函数用的特殊的return。调用next()时,生成器函数不断的执行语句,直至遇到yield为止,此时生成器函数的"状态"会被冻结,所有的变量的值会被保留下来,下一行要执行的代码的位置也会被记录,直到再次调用next()继续执行yield之后的语句。
next()不能无限执行,当迭代结束时,会抛出StopIteration异常。迭代未结束时,如果你想结束生成器,可以使用close()方法。
- 看以下用法
输出def generate_one(list_num): print('start') for i in list_num: yield i * i print('end') v1 = generate_one([1, 2, 3, 4, 5]) for v in v1: print(v)
其中每次调用生成器会先执行yield之前的语句 直到遇到yield返回(类似于return)带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行
生成器的四个方法
- __next__()
- send()
- throw()
- close()
最后
以上就是寂寞心锁为你收集整理的python-生成器-yield关键字(一)的全部内容,希望文章能够帮你解决python-生成器-yield关键字(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复