Tommonkey

All greatness comes from a brave beginning

0%

Python的yield关键字

Python的yield关键字

yiele关键字是什么?他是一个类似return的关键字,函数中带有该关键字时就表示是一个生成器,而不在表示一个函数了,该生成器自带一些函数比如next(),send()等。你可以先把它看成return。不过他和return的区别在于return执行完毕后就结束了,即停止。而yield执行完毕后只是暂停了,后续还可以继续使用send()来运行。如果听不懂,就先把yield当作trturn来理解。我们通过代码来理解会更好一点。
第一个列子:

1
2
3
4
5
6
7
def test(num):
for i in num:
yield i
return "执行结束"

# 返回生成器
obj_test = test(3)

`

运行结果:
1-1
1-2
next()函数:next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束
第二个列子:

1
2
3
4
5
6
7
8
9
def test1():
print("start running!")
while True:
content = yield "halo!"
print("context is:",content)

result = test1()
print(next(result))

运行结果:
1-3
1-4
可以看见在第二次next()输出的时候context值为none,原因是上一次运行到yield时halo的值已经赋值给content,然后输出了,而第二次运行开始的地方是第一次运行结束的地方,即直接运行了print中的内容,而没有了赋值的这一步。此时通过send()函数解决即可,因为他不是缺一个赋值吗,那我们就发送一个值给他就好了,(注意:使用send()会自动执行一次next)如下图:
1-5

奖励作者买杯可乐?