python生成器

    技术2023-05-04  69

        一、概念:生成器是特殊的迭代器,只要函数yield的函数就是生成器函数。     二、作用:可以控制一个函数的执行,让一个函数执行到yield后停止执行,并返回对应的数据;可以使用next和send函数来启动生成器,执行函数体。     三、执行过程:当第一次启动生成器函数执行时,会从函数体的开头开始执行;之后再启动时,就会从上次执行暂停的地方,也就是yield处接着执行。

    1.使用next启动生成器
    def create_num(all_num): print("-------1-------") a, b = 0, 1 current_num = 0 while current_num < all_num: print("-------2-------") yield a # 3.函数体执行到yield后会将a返回,并且停在此次执行,下次会从下一行代码继续执行 print("-------3--------") a, b = b, a+b current_num += 1 print("-------4--------") if __name__ == "__main__": obj = create_num(22) # 1.这里不会执行函数体,会创建一个生成器对象给obj ret = next(obj) # 2.next会执行实参对应的函数体,如果上次已经执行到yield,则会从yield处继续执行 print(ret) ret = next(obj) print(ret)
    2.使用send启动生成器
    def create_num(all_num): a, b = 0, 1 current_num = 0 while current_num < all_num: res = yield a print("res: ", res) a, b = b, a+b current_num += 1 if __name__ == "__main__": obj = create_num(2) ret = next(obj) print(ret) ret = obj.send("传递给yield左边对象的数据") """ 1.send启动生成器时,可以传递数据,将数据传递给yield左边的res; 2.之后继续执行yield的下一行代码,最后yield返回a的值给ret """ print(ret)

    3.区别:next启动时不可以传递数据给生成器函数,而send启动时可以传递数据给生成器函数。

    Processed: 0.011, SQL: 9