• 关于python3 的高级特性yield用法与实践


    针对于理解yield,那么首先了解迭代器,生成器,最后去了解yield
    # 执行函数
    mylist = [1,2,3] for i in mylist: print(i)
    输出结果:
    1
    2
    3
    这里的mylist是一个可迭代对象,当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象:
    # 使用列表生成式新增的一个mylist2
    mylist2 = [x*x for x in range(1,4)] for j in mylist2: print(j)
    生成器是可以迭代的,但是你只可以读取它一次 , 因为它并不把所有的值放在内存中,它是实时地生成数据,栗子:
    def CreateGenerator():
        mylist = (x * x for x in range(1, 4))
        for z in mylist:
            yield z
    if __name__ == '__main__':
        mygenerator = CreateGenerator()
        for i in mygenerator:
            print(i)
    CreateGenerator()这个函数就是生成器,我把它赋值给一个变量mygenerator ,在使用for循环输出,也可以在python consele控制台进行next(mygenerator)进行一个一个的输出;
    tips:
    迭代是一个实现可迭代对象(实现的是 `__iter__()` 方法)和迭代器(实现的是 `__next__()` 方法)的过程。
    可迭代对象是你可以从其获取到一个迭代器的任一对象。迭代器是那些允许你迭代可迭代对象的对象。
    因为迭代器的数据不在内存中,一次只给出一个返回值,使用return(返回全部的)无法获取到我们想要的值,所以使用yield可以中断并返回这个值;
    举个栗子,实现杨辉三角10层:
    # 杨辉三角的实现@@@@@@@
    def CreatGenerator():
        x = [1]
        for i in range(0,10):
            yield x
            x.append(0)
            x = [x[k] + x[k-1] for k in range(i+2)]
    zz = CreatGenerator()
    for i in zz:
        print(i)

    输出结果为:

    [1]
    [1, 1]
    [1, 2, 1]
    [1, 3, 3, 1]
    [1, 4, 6, 4, 1]
    [1, 5, 10, 10, 5, 1]
    [1, 6, 15, 20, 15, 6, 1]
    [1, 7, 21, 35, 35, 21, 7, 1]
    [1, 8, 28, 56, 70, 56, 28, 8, 1]
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

    代码不是很完善,有错误还请指正,定当修改~

  • 相关阅读:
    下拉列表实现模糊匹配选择
    Java读取修改Properties文件
    idea2018.2.4的安装激活与热部署插件JRebel的激活方法
    request.getScheme() 使用方法
    Navicat连接mysql8.0.1版本出现1251--Client does not support authentication protocol requested by server的解决
    javascript
    CSS第二节
    HTML+CSS
    mysql
    ubuntu常见错误
  • 原文地址:https://www.cnblogs.com/spider3658/p/14511136.html
Copyright © 2020-2023  润新知