如何得到自定义的迭代器
在函数内一旦存在yield关键字,调用函数并不会执行函数体代码
会返回一个生成器对象,生成器即自定义的迭代器
def func(): print('第一次') yield 1 print('第二次') yield 2 print('第三次') yield 3 print('第四次') g=func() print(g) # output:<generator object func at 0x0000029ACCD0E430> # 生成器就是迭代器 g.__iter__() g.__next__() # output:第一次
会触发函数体代码的运行,然后遇到yield停下来,将yield后的值当做本次调用的结果返回
# 示例 def func(): print('第一次') yield 1 print('第二次') yield 2 print('第三次') yield 3 print('第四次') g=func() res1=g.__next__() # output:第一次 print(res1) # output:1 res2=g.__next__() #output:第二次 print(res2) # output:2 res3=g.__next__() # output:第三次 print(res3) # output:3 res4=g.__next__() # output:StopIteration
# 语法 len('aaa') # 'aaa'.__len__() next(g) # g.__next__() iter(可迭代对象) # 可迭代对象.__iter__()
# 应用案例 def my_range(start,stop,step=1): print('start...') while start < stop: yield start start+=step print('end....')
总结yield
有了yield关键字,我们就有了一种自定义迭代器的实现方式。yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值
来源:https://www.cnblogs.com/zhuyouai/p/12561443.html