需求:造一个类型,产生无穷个值,用之前的列表、字典都不太符合
1、如何得到自定义的迭代器
#在函数内一旦存在yield关键字,调用函数并不会执行函数体代码,会返回一个生成器对象,生成器即自定义的迭代器
def func():
print("第一次")
yield 1
print("第二次")
yield 1
print("第三次")
yield 1
print("第四次")
#func() #函数内有yield关键字,调用函数,不执行函数代码体
g=func() #函数内有yield关键字,不会执行函数体代码,会有一个返回值
# print(g)
#<generator object func at 0x00000000005A6AC0>
生成器就是迭代器
# g.__iter__()
# g.__next__()
会触发函数体代码的运行,然后遇到yield停下来,将yield后的值当做本次调用的结果返回
# res=g.__next__() #第一次
# print(res) #1
2、应用案例:自定义迭代器
def func1(start,stop,step):
while start < stop:
yield start
start+=step
# g1=func1(1,5,2)
# print(next(g1))
# print(next(g1))
上面使用next进行每次迭代取值,使用for循环(for循环叫迭代器循环,生成器就是迭代器)
for i in func1(1,7,2):
print(i)