Python yield 关键字

结论:

yield 就是 记录一个 返回值 及其 返回位置,下次迭代从这个 位置 开始。带 yield 的函数更像是一个生成器,而不再是函数了。

实例:

首先定义一个如下函数

def gen():
     print('line 1')
     yield 1
     print('line 2')
     yield 2
     print('line 3')
     return 3

测试1

next(gen()) 
next(gen())

输出结果:

line 1
line 1

理解:next()每次调用了一个新的gen()对象实例


测试2

g =  gen()
print(next(g))
print(next(g))
print(next(g,'End'))

输出结果:

line 1
line 2
line 3

理解:next()迭代赋予g的一个对象实例


测试3

g =  gen()
print(next(g))
print(next(g))
print(next(g,'End'))

输出结果:

line 1
1
line 2
2
line 3
End

理解:同迭代元组对象相同,迭代打印。最后一个End赋值是因为next接收不到 return 的 3,不赋值会报错。


进阶:

def myMap(func, iterable):
    for item in iterable:
        yield func(item)

result = myMap(str, range(5))
print(result)
print(list(result))

输出结果:

<生成器对象地址>
['0','1','2','3','4']

经过上一个实例的三个测试,看到这里大家应该都能明白了。

posted @ 2021-09-29 10:08  anyiya  阅读(61)  评论(0编辑  收藏  举报