Python_生成器(generator)

generator与list比较

  • generator:算法实现下一个数据的输出,不调用下一个,就不执行下一个数据的运算
  • list:直接存储于内存,所有数据都同时存在
  • generator相较于list占用内存小

创建一个简单的generator

  • 简单的generator的创建:在列表生成式的基础上将[]改为()
    例如:
g=(x*x for x in range(10))
  • generator的调用
    • next调用:(直到报错结束)
    >>> g=(x*x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x0610BC00>
    >>> next(g)
    0
    >>> 
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    9
    >>> next(g)
    16
    >>> next(g)
    25
    >>> next(g)
    36
    >>> next(g)
    49
    >>> next(g)
    64
    >>> next(g)
    81
    >>> next(g)
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        next(g)
    StopIteration
    
    • for循环调用:
    >>> def g_get():
            for n in g:
                print(n)
    
    >>> g=(x*x for x in range(10))
    >>> g_get()
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
    

创建一个函数形式的generator

  • 函数型的generator的创建:
    与普通函数不同的是含有关键字yield,即含有yield的函数就是generator
 >>> def yhsj():
    L=[1]
    while True:
        yield L
        L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

      
>>> def get_yhsj():
    for n in yhsj():
        print(n)

      
>>> get_yhsj()
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
...

函数型的generator与普通函数的不同

  • 除了含有yield关键字外,还有就是执行顺序不同,普通函数的执行是按顺序的,而generator是执行到yield语句就停止,知道下一次调用,执行接下来的语句
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个...
    PyChina阅读 7,836评论 0 3
  • 1.生成器(generator)概念 生成器是迭代器,生成器提供了非常方便的自定义迭代器的途径,在Python中,...
    Pello_Luo阅读 4,258评论 0 0
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,755评论 0 38
  • 你舞姿惊艳,那只是当年 你笔落惊天,我已看不见 最后的一眼,相隔已久远 我送你的信书,你没给我回复 我对你的付出,...
    惊涛的诗阅读 1,855评论 0 5
  • 文/ 素智 1. 喜欢上杰的那一年,我15岁。 那年我们初三,除了努力学习考上一个差不多的学校,我还有一个更重要的...
    素智阅读 4,413评论 29 24

友情链接更多精彩内容