Python yield 关键字

参考:https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do
Python 中的 yield 函数有 类似于 return的功能,其区别在于 return 返回之后就不会再进入这个函数了,而 yield则会再次返回这个函数
这在当你需要返回的数据量特别大的时候,用 return返回会占据很大的内存空间,如果使用yiled加上for等就可以实现迭代返回,每次需要多少就返回多少,减少内存的占用。
比如以下函数:

def f1():
    a = [1,2,3,4,5]
    b = [6,7,8,9,0]
    for i, j in zip(a,b):
        print("f1: ",(i,j))
        yield i,j

def f2():
    c = f1()
    for i, j in c:
        print("f2: ",(i,j))
        yield i,j

z = f2()
for i, j in z:
    print("Main",(i,j))

执行以上程序,其输出为:

('f1: ', (1, 6))
('f2: ', (1, 6))
('Main', (1, 6))
('f1: ', (2, 7))
('f2: ', (2, 7))
('Main', (2, 7))
('f1: ', (3, 8))
('f2: ', (3, 8))
('Main', (3, 8))
('f1: ', (4, 9))
('f2: ', (4, 9))
('Main', (4, 9))
('f1: ', (5, 0))
('f2: ', (5, 0))
('Main', (5, 0))

可以看到,when you call the function, the code you have written in the function body does not run.

  • 当调用这个函数时,函数中的代码并没有被执行,而是等到for迭代时才跳回去执行代码;
  • 调用这个函数 比如 z=f2(),只是返回一个 generator object,f2函数里面的 for 循环并没有被立即执行。
原文地址:https://www.cnblogs.com/qiulinzhang/p/14287326.html