5.4 函数返回

5.3.1 yield

迭代器是一种可以对容器内元素进行遍历的数据类型**。**

生成器是一个可以返回迭代对象的函数。(?)生成器是函数体内包含yield函数的def语句。生成器是特殊的迭代器。

yield的作用是把一个函数转为一个生成器,并且当程序再次调用这个函数的时候,将从这个函数的yield的下一句开始执行。

>>>from math import sqrt

>>>def gensqrt(N):

for i in range(N):

yield math.sqrt(i)

该函数在每次循环都会生成一个值,返回给它的调用者。当它被挂起时,它的上一个状态(作用域内变量)被保存了下来。

当我们尝试使用传统函数调用方式时:

>>>G=gensqrt(7)

<generator object gensqrt at 0x0000023D36935C78>

得到一个生成器对象,也就是说,python解释器返回了对生成器函数进行解释产生的生成器对象。我们可以使用函数next()返回迭代器的下一个数据项。

>>>next(G)

0.0

>>>next(G)

1.4142135623730951

>>>next(G)

1.7320508075688772

>>>next(G)

2.23606797749979

>>>next(G)

2.449489742783178

我们还可以使用for循环来对生成器中的元素进行遍历:

>>>for i in gensqrt(7):

print(i, end=’ ‘)

0.0 1.0 1.4142135623730951 1.7320508075688772 2.0 2.23606797749979 2.449489742783178

5.3.2 return

return语句的作用是跳出函数,忽视位于其后的函数体中的所有语句。当return语句后存在变量时,也可以将这个变量返回。

例:求半径为2.1的球体的体积

from math import pi, pow

def volume_sphere(r):

return 3/4*pi*pow(r, 3)

print(“The volume of sphere with a radius of 2.1m is %f cubic metre.” %sphere(2.1))

运行结果

The volume of sphere with a radius of 2.1m is 48.000000 cubic metre.

5.3.3 yield与return的对比

生成器函数被调用的过程中,yield语句会向调用者发回一个结果对象,同时会记住它此时的运行状态,然后退出函数。生成器内的所有变量参数都会被保存下来,在下一次运行生成器的时候使用。

在函数被调用的过程中,调用者将暂停运行,直到函数完成运行。return将计算得到的结果对象返回给调用者,同时将控制权交还给调用者而不管return语句后是否还有其他语句,如果函数内没有return语句,则函数会在函数体执行完后,返回默认值None,并将控制权交还给调用者。

Last updated