• 〖Python〗-- 迭代器与生成器补充


    【迭代器与生成器补充】

    初步铺垫:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for in [1,2,3,4]:
    pass
     
    = [1,2,3,4]
     
    l2 = iter(l)
    print(l2.__next__())
    print(l2.__next__)
     
    print(range(100)) #range(100) 就是一个生成器,为了节省内存,值不会直接输出
    print(range(0,100))

    #两种range取值方法:

    1
    2
    3
    4
    print(list(range(100))) #通过列表
    for in range(100): #通过for循环
        print(i)
    print(list(range(1,100,2))) #步长

    生成器变形计划:

    一级变形:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def a():
        = 0
        while True:
            # return a
            yield a
            = a+1
     
    print(a().__next__())
    print(a().__next__())  #全是0,每次重新执行那个函数,这个函数就会重新执行

    二级变形:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def a():
        = 0
        while True:
            # return a
            yield a
            = a+1
     
    = a()
    print(l)
    print(l.__next__()) #next可以递归的取值,是因为l始终指得是一个函数
    print(l.__next__())
    print(l.__next__())

    三级变形:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def test2():
        # for i in range(1,6):
        #     yield i #冻结
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
     
    l=test2()
    print(l.__next__())
    print(l.__next__())
    print(l.__next__())

    四级变形:(模拟range功能)

    1
    2
    3
    4
    5
    6
    7
    8
    def range2():
        start = 0
        while start<10:
            yield start*4
            start += 1
     
    for in range2():
        print(i)

    五级变形:

    1
    2
    3
    4
    5
    6
    7
    8
    def range2():
        start = 0
        = []
        while start<100:
            l.append(start*4)
            start += 1
        return l
    print(range2())

    六级变形:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def range3():
        start = 0
        while True:
            yield start*4
            start += 1
     
    # print(range3())
    for in range3():
        print(i)

    练习变形计划

    练习一:

    "1+1+2+3+5..." #斐波那契数列

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #初步:
    def test():
        a,b = 1,1
        while a<10:
            = + b
            yield c
            = b
            = c
    print(test())
    = test()
    print(l.__next__())
    print(l.__next__())
    for in l:
        print(i)
     
     
    #终极:
    def test4():
        = 1
        yield a
        = 1
        yield b
        while True:
            = a+b
            yield c
            = b
            = c
     
    = test4()
    print(l.__next__())
    print(l.__next__())
    print(l.__next__())
    print(l.__next__())
    print(l.__next__())
    # for i in l:
    #     print(i)

    练习二:

    母鸡下蛋例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def test3():
        = 0
        while i < 10:
            yield '母鸡下了个蛋,这是第%s个蛋'%(i+1)
            += 1
     
    = test3()
     
    print(l.__next__())
    print(l.__next__())
    print(l.__next__())
    for in l:
        print(i)

     

  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/SHENGXIN/p/7497606.html
Copyright © 2020-2023  润新知