Python全系列 教程
3567个小节阅读:5931.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
生成器函数:
- 如果一个函数中包含
yield
关键字,那么这个函数就不再是一个普通函数,调用函数就是创建了一个生成器(generator)对象。- 生成器函数:其实就是利用关键字
yield
一次性返回一个结果,阻塞,重新开始
原理是这样的:
__next__()
函数,不断运行到下一个yield
语句,一次一次取得每一个返回值,直到没有yield
语句为止,最终引发StopIteration
异常。yield
相当于return
返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield
的下一条语句(不是下一行)开始执行。send()
和next()
一样,都能让生成器继续往下走一步(下次遇到yield
停),但send()
能传一个值,这个值作为yield
表达式整体的结果生成器推导式底层原理也是这样的。
【示例】测试生成器工作原理(yield)
xxxxxxxxxx
#coding=utf-8
"""
1. 函数有了yield之后,调用它,就会生成一个生成器
2. yield作用:程序挂起,返回相应的值。下次从下一个语句开始执行。
3. return在生成器中代表生成器终止,直接报错:StopIeratation
4. next方法作用:唤醒并继续执行
"""
def test():
print("start")
i=0
while i<3:
temp = yield i #下次迭代时,代码从`yield`的下一条语句(不是下一行)开始执行
print(f"temp:{temp}")
i += 1
print("end")
return "done"
if __name__ == '__main__':
a = test()
print(type(a))
print(a.__next__())
print(a.__next__())
print(a.__next__()) # next(a) 一样
print(a.__next__()) # 抛出异常:StopIteration
"""
运行结果:
start
0
temp:None
1
temp:None
2
temp:None
end
Traceback (most recent call last):
File "C:\Users\webChubby\PycharmProjects\网络编程\test.py", line 18, in
print(a.__next__()) # 抛出异常:StopIteration
StopIteration: done
"""