python中yield和return使用方式的区别

python中yield和return使用方式的区别_第1张图片

在python的函数中常会用到return,有时候也会用到yield,它们都是用来返回函数运行返回的某些结果的,本文通过简单的几个例子展示一下两者的区别。

文章目录

  • 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 "", 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()获取生成器的结果,这里就不展示结果了。

你可能感兴趣的:(python)