• python之生成器


    1.什么是生成器

    - 生成的工具
    - 生成器可以理解为一个”自定义“的迭代器。
    

    2.如何实现生成器

    # 但凡在函数内部使用yield,调用该函数时,函数体代码不会执行。
    # 而是返回一个生成器。
    def func1():
        print(1)
        yield 2
        
    func1() # 此时未执行,无输出
    res = func1()
    print(res)  # 输出为generator生成器对象。
    res.__next__() # 输出为(1)
    

    yield:

    • 每次执行到yield都会往生成器对象中添加一个值。
    • 只能在函数内部定义。
    • yield可以保存函数的暂停状态。

    return:

    • 函数遇到return将直接结束并返回。

    自定义迭代器:

    def func():
        print('准备下蛋')
        print('1---1号蛋')
       	yield '1号蛋'
        print('2---2号蛋')
        yield '2号蛋'
        print('3---3号蛋')
        yield '3号蛋'
        print('结束下蛋')
        
    res = func() #
    res.__next__()
    res.__next__()
    res.__next__()
    

    上述例子可发现:每次调用__next__方法时,程序会执行到下一个yield位置并暂停,直到下一次调用。

    def my_range(start, end, move=1):  # 简单的range实现
        while start < end:
            yield start
            start += move
    
  • 相关阅读:
    jchdl
    jchdl
    UVa 11134 (区间上的贪心) Fabled Rooks
    UVa (二分) 11627 Slalom
    POJ 1037 (计数 + DP) 一个美妙的栅栏
    HDU 3448 Bag Problem
    HDu 3449 (有依赖的01背包) Consumer
    POJ 1456 (贪心+并查集) Supermarket
    POJ 2236 (简单并查集) Wireless Network
    POJ 1703 Find them, Catch them
  • 原文地址:https://www.cnblogs.com/Ghostant/p/11857413.html
Copyright © 2020-2023  润新知