定义:其实也没啥好说,只要函数中带有yield,那么该函数就是一个生成器了。
特性:
首先定义yield生成器函数,如下:
def yield_func():
print("**")
while True:
result = yield 1
print("result:", result)
运行以下代码:
if __name__ == "__main__":
it=yield_func()
但是!!啥也没有,说明 1.it=yield_func() 只是定义了一个生成器,根本不会执行生成器里面的内容
运行以下代码:
if __name__ == "__main__":
it=yield_func()
print(next(it))
结果如下:
**
1
说明 2.该生成器执行yield语句之后,便会停止执行。
运行以下代码:
if __name__ == "__main__":
it=yield_func()
print(next(it))
print(next(it)))
结果如下:
**
1
result: None
1
该结果说明 3.当再执行next,生成器会在上一次的地方继续执行,直到执行yield返回结果为止。
结合上一个例子,说明 4.执行yield之后,程序并没有结束,而是悬挂那里,等待下一次的执行。
但result: None 说明 5. 程序并不保留上一次yield的结果,而是重新开始
再来!
定义如下yiled生成器函数:
def yield_func1():
for i in [1,2,3]:
yield i
运行以下代码:
if __name__ == "__main__":
it=yield_func1()
print(next(it))
print(next(it))
print(next(it))
print(sum(it))
print(next(it))
结果如下:
1
2
3
0
Traceback (most recent call last):
File "c:\Users\92872\Desktop\a\1.py", line 32, in <module>
print(next(it))
StopIteration
3个next()完了后求和结果为0,再next()就报错, 说明 6.yiled生成器的只会产生一轮结果,迭代完了后执行next()会抛出StopIteration的错误
本人学渣,如果错误,欢迎指出!