06-生成器

﹥>﹥吖頭↗ 提交于 2020-03-24 20:50:40

如何得到自定义的迭代器

在函数内一旦存在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可以保存函数的运行状态挂起函数,用来返回多次值

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!