在python的函数中常会用到return,有时候也会用到yield,它们都是用来返回函数运行返回的某些结果的,本文通过简单的几个例子展示一下两者的区别。
return
return最为常见,十分简单,其返回运行一次函数所得到的结果,且在return语句之后python解释器会直接跳出函数,函数剩下的其它所有语句或者循环都不再被运行。
比如下例:
def return_exam():
l = []
for i in range(5):
l.append(i)
return l # 返回的是整个列表
print("执行结束") # 这一句不会执行
yield
使用yield与return的区别就在于yield是返回一个生成器(generator)对象。python中的生成器,可以使用next()来逐个获取yield返回的值。同时运行机制为在运行包含有生成器的函数的时候,只要碰到yield就暂停,这时候会保存当前运行的信息,也就是之前所产生的变量等都不会改变。
例:
def yield_exam():
for i in range(5):
yield i
print('i的值', i)
a = yield_exam() # 这里产生一个生成器对象并命名为a
next(a) # 这里可以多次运行,直到报错信息stop iteration出现为止
这里运行所有的结果为:
>>> a = yield_exam()
>>> next(a)
0
>>> next(a)
i的值: 0
1
>>> next(a)
i的值: 1
2
>>> next(a)
i的值: 2
3
>>> next(a)
i的值: 3
4
>>> next(a)
i的值: 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
观察结果可知,在运行到yield处时,函数暂停运行,使用下一个next后再次开始正常运行,直到遇到下一个yield。
除了这种for循环产生的生成器,实际上也可以自己写多个yield语句,这样和上面运行的效果是一样的,例如下面的例子:
def multi_yield():
yield 0
yield 1
yield 2
yield 3
b = multi_yield()
同样可以使用多个next()获取生成器的结果,这里就不展示结果了。
|