# 生成器
#什么是生成器(yield)
#生成器就是一种自定义的迭代器
#为什么需要生成器
#生成器是用来返回多次值的一个工具,return只能返回一次值
# 在函数内一旦存在yield关键字,调用该函数不会执行函数体
# 而会返回一个生成器对象(其实就是自定义的迭代器对象)
# 可以使用生成器对象.__next__()来获得返回值
def func():
print("第一次")
yield 1
print("第二次")
yield 2
print("第三次")
yield 3
print("第四次")
ret = func()
#print(ret) <generator object func at 0x02B44F08> 生成器对象
print(ret is ret.__iter__()) #True #等价于iter(ret)
# ret.__next__()会触发函数代码的运行,然后遇到yield停下来,将yield后的值作为返回结果返回
result =ret.__next__() #等价于next(ret)
print(result) # 1
result1 =next(ret) #等价于next(ret)
print(result1) # 2
print(next(ret)) # 3
try:
print(next(ret))
# 遍历越界会抛出StopIteration异常
except StopIteration:
print("遍历完了")
# 案例my_range
def my_range(start, stop, step=1):
# 只为了演示生成器的效果,未加参数判断
while start < stop:
yield start
start += step
for x in my_range(0,10):
print(x,end=' ') # 0 1 2 3 4 5 6 7 8 9
python中的yield生成器
最新推荐文章于 2023-02-07 16:54:06 发布