前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python生成器回顾

python生成器回顾

作者头像
Cloud-Cloudys
发布2020-07-07 16:03:20
2660
发布2020-07-07 16:03:20
举报
文章被收录于专栏:ShanSan的云原生之路

python生成器(generator)

  • 生成器是一种使用普通函数语法定义的迭代器
  • 包含yield语句的函数都是生成器,它是一个不断产生值的函数
  • 生成器每次使用yield产生一个值后,函数都将冻结,即在此处停止执行,等待重新被唤醒。被唤醒后从停止的地方开始继续执行

生成器推导(生成器表达式)

* 使用圆括号()创建一个生成器推导 *,它创建了一个可迭代的对象 使用next()函数可以获得生成器推导的下一个返回值

代码语言:javascript
复制
g = (i**2 for i in range(10))

simple generator

** demo_1 **

斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到

** demo_2_generator **

recursive generator

处理多层嵌套列表

代码语言:javascript
复制
def flagtten(nested):
    try:
        for sublist in nested:
            for element in flagtten(sublist):
                yield element
    except TypeError:#处理迭代单个对象引起的typeerror异常
        yield nested

def main():
    s = list(flagtten([1,[2,3]]))
    print(s)


main()
代码语言:javascript
复制
def flagtten(nested):
    try:
        #不迭代类似于字符串的对象
        try:
            nested + ''
        except TypeError:
            pass
        else:
            raise TypeError
        for sublist in nested:
            for temp in flagtten(sublist):
                yield temp
    except TypeError:
        yield nested

def main():
    s = list(flagtten(["haha",["shan","san"]]))
    print(s)


main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月2日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python生成器(generator)
    • 生成器推导(生成器表达式)
      • simple generator
        • recursive generator
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档