zoukankan      html  css  js  c++  java
  • 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 循环并没有被立即执行。
  • 相关阅读:
    jQuery初级篇
    DOM初级篇
    CSS基础篇
    javascript 初级篇
    HTML 基础篇
    Oracle文章中常用数据表的描述
    Oracle视图基础
    Oracle序列简单应用
    Oracle关联查询关于left/right join的那点事
    赋值和算术运算符
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/14287326.html
Copyright © 2011-2022 走看看