美文网首页
Python yield 关键字

Python yield 关键字

作者: 默写年华Antifragile | 来源:发表于2021-01-16 21:13 被阅读0次

    参考: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 循环并没有被立即执行。

    相关文章

      网友评论

          本文标题:Python yield 关键字

          本文链接:https://www.haomeiwen.com/subject/vtznaktx.html