#需求:造一个工具用来返回值,并且可以返回很多次值
#如何得到自定义的迭代器:
#在函数内一旦存在yield关键字,调用函数并不会执行函数体代码
#会返回一个生成器对象,生成器即自定义的迭代器
def func():
print('第一次')
yield 1
print('第二次')
yield 2
print('第三次')
yield 3
print('第四次')
f=func() #调函数得到的返回值和函数体代码没关系
# print(f)
# 生成器就是迭代器
# f.__iter__()
f.__next__() #执行__next__()才会触发函数体执行
# f.__iter__()
f.__next__()
res=next(f)
# res=next(f)
# #会触发函数体代码执行,然后遇到yield停下来,
# #将yield当作本次调用的结果返回
# # f.__next__()
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# # print(f.__next__()) # 没值,报错,topIteration
#next(g) # ==> g.__next()__
#应用案例:
def my_range(start,stop,step=1):
print('start...')
while start < stop:
yield start
start += step
print('end...')
g=my_range(1,5,2)
# res=next(g)
print(next(g))
print(next(g))
# print(next(g)) #取值取完了,报错
#
# for n in my_range(1,7,2):
# print(n)
#yield 暂停,调用返回一次值,再调用再返回
#return 只能返回一次值