python的生成器是什么

图片[1]-python的生成器是什么-uusu优素-乐高,模型,3d打印,编程

什么是生成器

在Python中,一边循环一边计算的机制,称为生成器:generator。

python学习网,大量的免费python视频教程,欢迎在线学习!

普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

最简单的生成器函数:

>>>deffunc(n):
...yieldn*2
...
>>>func
<functionfuncat0x00000000029F6EB8>
>>>g=func(5)
>>>g
<generatorobjectfuncat0x0000000002908630>
>>>

func 就是一个生成器函数,调用该函数时返回对象就是生成器 g ,这个生成器对象的行为和迭代器是非常相似的,可以用在 for 循环等场景中。注意 yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回

>>>g=func(5)
>>>next(g)
10
>>>g=func(5)
>>>foriing:
...print(i)
...
10

那为什么要用生成器呢?显然,用生成器在逼格上要比迭代器高几个等级,它没有那么多冗长代码了,而且性能上一样的高效,为什么不用呢?来看看用生成器实现斐波那契数列有多简单。

deffib(n):
prev,curr=0,1
whilen>0:
n-=1
yieldcurr
prev,curr=curr,curr+prev
print([iforiinfib(10)])
#[1,1,2,3,5,8,13,21,34,55]

生成器表达式

在前面一期「这样写代码更优雅」的文章里面曾经介绍过列表推导式(list comprehension),生成器表达式与列表推导式长的非常像,但是它俩返回的对象不一样,前者返回生成器对象,后者返回列表对象。

>>>g=(x*2forxinrange(10))
>>>type(g)
<type'generator'>
>>>l=[x*2forxinrange(10)]
>>>type(l)
<type'list'>
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容