zoukankan      html  css  js  c++  java
  • python中的生成器

    什么是生成器?

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    eg:

    def bar():
    l = ['a','b','c']
    for i in l:
    yield i
    res = bar()
    for i in res:
    print(i)
    >>> a
    >>> b
    >>> c
    def test():
    list=[]
    for I in range(10):
    list.append(i)
    i+=1
    return list
    res=test()
    print(res)
    >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    def test():
    for i in range(6):
    yield i
    res=test()
    for i in res:
    print(i)
    >>> 0
    >>> 1
    >>> 2
    >>> 3
    >>> 4
    >>> 5

    总结:

    • 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
    • 生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。
    • 只要函数里有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
    • yield可以返回多个值,并且同一时间内存里值存储一个值,只能向后取值,不能向前取值

    生成器的特点:
      1、节约内存
      2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

     

    作者:无荨

    -------------------------------------------

    个性签名:学IT,就要做到‘活到老学到老’!

    如果觉得这篇文章对你有小小的帮助的话,别忘记点个“推荐”哦!

  • 相关阅读:
    vue强制更新$forceUpdate()
    js数组拼接成字符串,去除最后一个逗号
    JavaScript数组遍历:for、foreach、for in、for of、、().each的区别
    json.stringify()的妙用,json.stringify()与json.parse()的区别
    第四次博客作业-结对项目
    于达——第九次作业
    于达——第八次作业
    软件工程第三次作业——关于软件质量保障初探
    于达——第七次作业
    于达——第六次作业
  • 原文地址:https://www.cnblogs.com/twoo/p/11672169.html
Copyright © 2011-2022 走看看