Python yield 关键字

2021-01-16  本文已影响0人  默写年华Antifragile

参考: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.

上一篇 下一篇

猜你喜欢

热点阅读