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

  • 相关阅读:
    【递归】拆分自然数
    HDOJ3068最长回文
    博弈论——尼姆博奕
    vijos P1047最小公倍数
    Eular质数筛法-hiho一下 第九十三周
    hdoj-5652 India and China Origins二分+bfs
    hdoj-1166排兵布阵 简单的树状数组
    hdoj-5641 king's phone
    hdoj-1548简单的bfs题目
    命令中"|"的意义
  • 原文地址:https://www.cnblogs.com/dLarger/p/10565209.html
Copyright © 2011-2022 走看看