`

Python之生成器

阅读更多
generator:生成器
    generator中保存的是算法,在调用时才计算。
    1、列表生成式转 generator
    L = [x*x for x in range(10)]  ###列表
    g = (x*x for x in range(10))  ###generator
      通过next(g)一个一个打印元素:>>>next(g)  
                                      0
                                   >>>next(g)  
                                      1
                                   >>>next(g)
                                      4
      通过for循环打印(因为generator是可迭代对象):
            for n in g:
               print(n)
      通过list打印:print(list(g))
   
    2、函数实现generator:
     def fib(max):
         n, a, b = 0, 0, 1
         while n < max:
             yield b
             a, b = b, a + b
             n = n + 1
         return 'done'
     print(list(fib(6)))


来看一个网上的面试题:
def add(n,i):
    return n+i
def test():
    for i in range(4):
        yield i
g = test()
for n in [1,10,5]:
    g = (add(n,i) for i in g)

print(list(g))的结果是多少?
正确答案是[15,16,17,18]
个人理解过程如下:
当n为1时,此时g为初始generator test,执行for循环代码重新给g赋值:
g = (add(n,i) for i in test())
当n为10时,此时g为上面的generator,执行for循环代码重新给g赋值:
g = (add(n,i) for i in (add(n,i) for i in test()))
当n为5时,g为上面新的generator,执行for循环重新给g赋值:
g = (add(n,i) for i in (add(n,i) for i in (add(n,i) for i in test())))
当执行print(list(g))时,是要打印g中所有数据,此时g进行实际的计算:当前n为5,test返回的是[0,1,2,3],带入g的公式中
g = (add(5,i) for i in (add(5,i) for i in (add(5,i) for i in (0,1,2,3))))
g = (add(5,i) for i in (add(5,i) for i in (5,6,7,8))
g = (add(5,i) for i in (10,11,12,13))
最后g中数据为(15,16,17,18)
以上为个人理解,如有意见和建议欢迎反馈
分享到:
评论

相关推荐

    Python代码生成器1.0内测版

    您是否在学习Python的路程中感觉路程漫漫?是否曾经半途而废? 是否感觉该学的内容众多? 因为先前编过《信手拈来按键帮你来》所以这里秉承了它的理念。 以Delphi语言开发的,内置百款实例代码,从速借鉴、高效开发...

    Python实战示例 二维码生成器.zip

    Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器Python实战二维码生成器...

    Python代码生成器内测版1.0.7z

    【Python代码生成器内测版1.0.7z】是一个专为Python编程语言设计的工具,用于自动化代码编写过程,提升开发效率。这个版本是内测版,意味着它可能包含一些试验性的功能或者尚未公开的功能,用户在使用时需要有一定的...

    python 二维码生成器源码

    Python 二维码生成器是一种能够使用Python编程语言生成二维码图像的软件。它可以通过控制台或者导入模块的方式使用,可以生成各种格式的二维码,包括PNG、JPEG、GIF等格式,还可以生成带有文字、图片、链接等信息的...

    NFT人物头像随机生成器Python源码

    在这个特定的项目中,"NFT人物头像随机生成器Python源码" 是一个利用Python编程语言编写的程序,用于创建具有独特设计的人物头像,这些头像可以被用作NFT艺术品的基础。通过这个程序,用户可以生成一系列随机组合的...

    小白必看Python词云生成器详细解析及代码实现

    【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的实现.【小白必看】Python词云生成器详细解析及代码实现, 资源内容是词云图代码文件及相关资源,用于测试代码的...

    Python实战示例艺术签名生成器.zip

    Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python实战艺术签名生成器Python...

    python二维码生成器

    Python二维码生成器是一种利用Python编程语言创建二维码的工具。在当今信息化社会,二维码广泛应用于名片、网址、付款码、电子票务等领域。Python中有多个库支持二维码的生成,如`qrcode`、`pyqrcode`等。在这里,...

    基于Python语言的车牌自动生成器软件设计与实现

    1. 绪论 车牌自动生成器软件设计与实现是一个重要的课题,特别是在当前人工智能和...通过上述内容,本文将详细介绍如何利用Python和OpenCV构建一个功能完善的车牌自动生成器,为车牌识别技术的进步提供有力的支持。

    Python 实例 - 二维码生成器 Python源码

    Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - 二维码生成器 Python源码Python 实例 - ...

    python参数生成器

    在Python编程语言中,参数生成器是一种非常实用的工具,特别是在处理大量数据或者需要动态生成参数的场景下。参数生成器通常通过生成器函数来实现,这种函数在执行时不会一次性生成所有结果,而是每次调用`yield`...

    Python试卷生成器

    **Python试卷生成器** 在教育领域,特别是在学校和培训机构中,教师经常需要为学生准备考试试卷。手动创建试卷是一项耗时且重复的工作。为了解决这个问题,我们可以利用编程技术,特别是Python,来创建一个自动化的...

    python入门教程(非常详细),从零基础入门到精通,看完这一篇就够了.pdf

    * Python 之三元表达式、生成式、生成器表达式 * Python 之面向过程编程思想与匿名函数及其应用 * Python 之内置函数 * Python 之函数递归与调用 * Python 之二分法 第九章:模块 * Python 之模块 * 软件开发的...

    基于Python词云生成器

    在本案例中,我们关注的是一个基于Python实现的免安装词云生成器,它特别适合那些不熟悉编程环境设置或对Python无了解的用户。 首先,Python作为一种强大的编程语言,拥有丰富的库资源,其中`wordcloud`库是用于...

    汽车VIN码生成 python

    Python版的汽车WIN码生成器 汽车行业可能需要

    python3 简单密码生成器

    利用Python3的模块,实现简单的密码生成器,通过指定组成密码的字符及密码长度,生成全部组合的密码。

    05-python-迭代器-生成器-with语句和上下文管理器-修饰符

    在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...

    python批量生成二维码工具

    这个自定义工具弥补了在线二维码生成器无法满足特定需求的不足。在本文中,我们将深入探讨Python如何实现这一功能,并分享如何使用这个自定义工具来提高工作效率。 首先,我们需要了解二维码(Quick Response Code...

    Python海报生成器源码

    海报编辑器最左侧是组件...快速:三步完成海报开发工作:启动服务 &gt; 编辑海报 &gt; 生成代码 简单:组件丰富、支持拖拽、复制、所见即所得、下载等功能。 动态:无需更改代码,直接在编辑器修改海报即可获得最新的海报。

Global site tag (gtag.js) - Google Analytics