国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python常见问题 > python的生成器是什么

python的生成器是什么

生成器

头像

silencement

2019-12-21 13:53:185711浏览 · 0收藏 · 0评论

什么是生成器

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

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

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

最简单的生成器函数:

>>> def func(n):
...     yield n*2
...
>>> func
<function func at 0x00000000029F6EB8>
>>> g = func(5)
>>> g
<generator object func at 0x0000000002908630>
>>>

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

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

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

def fib(n):
    prev, curr = 0, 1
    while n > 0:
        n -= 1
        yield curr
        prev, curr = curr, curr + prev
print([i for i in fib(10)])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

生成器表达式

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

>>> g = (x*2 for x in range(10))
>>> type(g)
<type 'generator'>
>>> l = [x*2 for x in range(10)]
>>> type(l)
<type 'list'>

前面已经介绍过生成器的优势,就是迭代海量数据时,显然生成器更合适。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

女生穿露胸开又裙穿搭大忌| 老人船上弄雨荷1一5节| 欧美成人精品三区综合A片| 免费观看已满十八岁电视剧中文版..| 电影米香| 黑料门-今日黑料-万里长征| 《疯狂72小时》韩剧| 武松叼着潘金莲奶头的是谁扮演的 | 九九在线观看免费播放大全电视剧| 妻子的秘密韩剧大全免费| 《初尝禁果》2:做爰电影 | 《高压监狱2》完整版 | 老公拿狗给我配| 日韩精品| 上司趁老公不在到家拜访| 暴躁少女免费看完整版| 母与子免费观看大全电视剧| 女大馒头图片10张| 大杂烩(TXT)小说阅读| 白日梦我小说| 水手服| 免费看网站在线观看人数在哪直播| 房东老头揉捏吃我奶头影片| 半插和全插有什么区别| 巜交换做爰2伦理法国| 体育课被弄得很爽~H漫画| 《尼姑庵春梦》| 宝贝乖把腿开大让我添添什么歌| 二人生猴子全程免费| 小雪被老汉各种姿势玩弄视频| 古代洞房2国语版免费观看| 免费观看已满十八岁电视剧高清版| 他解开内裤把舌头进去的视频| 《-滴都不许漏》何泽城林荫| 六年级女孩裙子下的具体内容| 不戴套瑜伽教练3)| 妈妈がだけの母さん歌词| 女人高潮抖动多久能恢复正常| 亚洲尺码和欧洲尺码的区别在哪在.| 老师穿白色双开真丝旗袍怎么穿| 宝贝把腿开大让我添添你视频