函数作为返回值
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
先举个栗子,要实现一个可变参数的函数求和,通常这么写:
def calc_sum(*args):
ax = 0
for n in args:
ax += n
return ax
那么,如果不需要立刻求和,而是在后面的代码中,根据需要再去计算那怎么办呢?这时候就可以不返回求和的结果,而是返回求和的函数,如下:
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax += n
return ax
return sum
这时候,我们调用lazy_sum()的时候,返回的不是结果,而是求和的函数。这个在上一篇讲filter()函数的时候,里面有个例子是求:给出范围内所有的素数。里面有一个筛选函数,返回的就是一个函数。点击跳转
上面的函数还有个要注意的地方是这样,当调用lazy_sum()时,每次调用都会返回一个全新的函数,即便传入相同的参数:
>>> f1 = lazy_sum(10, 333, 15, 27, 89)
>>> f2 = lazy_sum(10, 333, 15, 27, 89)
>>> f1==f2
False
f1()和f2()的调用结果互不影响。