zoukankan      html  css  js  c++  java
  • Python-yield生成器

    1.引入生成器的目的:

    通常的for...in...循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存

    而生成器是可以迭代的,但只可以读取它一次,用的时候才生成,所以,生成器最大的特点是省内存!

    如:for n in range(1000):
                    a=n

    生成含有1000个数的list,占内存多,如果用yield可以实现如下:

    def foo(num):
        print("starting...")
        while num<1000:
            num=num+1
            yield num
    for n in foo(0):
        print(n)

    2.生成器的用法:

    两个关键的方法有:

    2.1 next():

    前面提到,生成器可以迭代,其能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常,才会结束。

    yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,是从上一次迭代遇到的yield后面的代码(下一行)开始执行。

    2.2 send():

    send(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值,作用等同与return.

    其他参考,比较容易理解的见https://blog.csdn.net/mieleizhi0522/article/details/82142856

  • 相关阅读:
    对象无法注册到Spring容器中,手动从spring容器中拿到我们需要的对象
    sping,springMVC @Component 注解的对象都是单例模式,变量不能全局
    java读取项目路径下的中文文件乱码问题
    springboot集成mongoDB 异常认证
    观察者模式
    MongoDB学习笔记03
    MongoDB学习笔记02
    ajax参数中出现空格
    web并发模型
    MongoDB shell
  • 原文地址:https://www.cnblogs.com/dLarger/p/10565209.html
Copyright © 2011-2022 走看看