看论文源代码的时候看到了这个yield,用起来感觉逼格很高,其实自己写个简单代码跑一下就知道这个东西还是蛮好理解的。
通过yield将循环内的变量封装成一个生成器(generator),然后通过调用函数的方式返回这个生成器,生成器只能用于迭代操作,更简单点理解生成器就是一个迭代器。
假如我打印0-9,用普通的for循环可以得到:
def fun1():
for i in range(10):
print(i)
fun1()
yield实现:
def fun2():
for i in range(10):
yield i
print(type(fun2()))
generator = fun2()
for each in generator:
print(each)
type(fun2())这条语句打印出来的是函数返回的数据类型:
<class 'generator'>
然后,就可以对这个生成器进行迭代操作了。当然,也可以使用生成器都自带的next()函数:
print(next(generator))
但是这个会报错StopIteration,因为上一个for循环已经把指针放到最末尾了,因此是没有next()了。