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,就要做到‘活到老学到老’!

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

  • 相关阅读:
    reason: ‘Could not instantiate class named NSLayoutConstraint’
    wzplayer 成功支持IOS
    【搜索】P1219 八皇后
    原生JS的移入溢出控制div的显示与隐藏
    es3设置属性不能修改
    插槽在父组件和子组件间的使用(vue3.0推荐)
    es5设置属性不能修改
    jquery操作css样式的方法
    基于jQuery的AJAX和JSON的实例 模版
    C#实现根据IP 查找真实地址
  • 原文地址:https://www.cnblogs.com/twoo/p/11672169.html
Copyright © 2011-2022 走看看