day18_04_生成器




#需求:造一个工具用来返回值,并且可以返回很多次值


#如何得到自定义的迭代器:
#在函数内一旦存在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 只能返回一次值





















posted @ 2021-01-06 09:06  欢乐二次方  阅读(74)  评论(0)    收藏  举报