python 生成器

生成器
大白话:生成器就是自定义的迭代器。
生成器本身就含有iter和next的内置方法,它本身就是迭代器,那么怎么定义一个生成器呢?那就需要用到yield关键字了,yiled有以下作用
yield可以暂停函数的运行,不像return,可以让函数处于运行状态且不执行代码。
yield可以返回值,类似于return,其值就是生成器对象。
next()的效果和.next()是一样的。
当生成器遇到next()的调用开始运行,遇到yield停止执行代码,返回生成器对象,等待下次next。

def func():
    print(11111)
    yield 11111
    print(22222)
    yield 22222
    
func()  # 此刻这个调用方式已经不好使了
a = func()  # 先弄一个生成器出来
b = next(a)  # 开始执行代码打印1111,在yield处暂停执行,返回11111
c = next(a)  # 继续执行2222,在yield暂停执行,返回22222
d = next(a)  # 函数体代码执行完毕,没有返回值,抛出StopIteration异常结束。

TIPS:
如若不先根据函数造一个生成器对象,即a = func()。一直使用next(func())就是在使用一个新的生成器,永远只执行第一个yield。我懵逼在这一段时间,如果你懂请忽略。

posted @ 2020-03-24 21:16  nick_xm  阅读(152)  评论(0编辑  收藏  举报