zoukankan      html  css  js  c++  java
  • Python 生成器和迭代器

    
    # iterator
    a = [1, 2]  # 可迭代对象 只有iter 没有 next,可迭代对象通过iter 可以得到一个迭代器
    print(dir(a))  # 查看方法
    b = a.__iter__()
    print(b)  # 迭代器 既有__iter__ 还有next
    print(b, type(b), dir(b))
    print(b.next())  # 迭代器保存的是生成值的算法,而可迭代对象保存的是值. 所以迭代器比列表节省空间。
    
    
    # generator 
    # **生成器函数:**常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行
    # **生成器表达式:**类似于列表推导式,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
    
    gen_ = (x for x in range(5))
    print(gen_)  # generator object
    
    
    def gen_test():
        for x in range(5):
            d = yield x
            print(d, 999)
    
    
    print(gen_test())  # generator object
    gen = gen_test()
    print(gen.next())
    c = gen.send(6)  # 将6赋给了d. next 方法是单纯的取值,而send在取值的同时,还可以给yield 语句赋值。
    # print(c)       # c的值是1. 这里的c应该叫返回值,但是d叫什么就不晓得了
    print(gen.next())
    print(gen.next())
    print(gen.next())
    
    
    def yanghuisanjiao(n):
        m = [1]
        while n:
            yield m
            m = [1] + [m[x] + m[x+1] for x in range(len(m)-1)] + [1]
            n = n - 1
            if n <= 0:
                break
    
    
    for x in yanghuisanjiao(4):
        print(x)
    

    利用yield 可以在返回值返回后利用返回值进行进一步操作。来获得下次的返回值

  • 相关阅读:
    重构之重新组织函数(ExTract Method)
    设计模式之桥接模式
    设计模式原则之里氏替换原则
    设计模式原则之依赖倒置原则
    设计模式原则之接口隔离原则
    设计模式原则之单一职责原则
    编译php5.6
    wireshark总结
    Blu-Ray BRRip 和 BDRip 的区别
    openwrt虚拟机的network unreachable
  • 原文地址:https://www.cnblogs.com/dg-blog/p/12691616.html
Copyright © 2011-2022 走看看