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

猜你喜欢

转载自www.cnblogs.com/dLarger/p/10565209.html
今日推荐