Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!----是不是很酷!
返回函数可以把一些计算延迟执行。举个
栗子1: 如果定义一个普通的求和函数:
def calc_sum(lst):
return sum(lst)
L1 = calc_sum([1, 2, 3, 4])
print(L1)
结果为: 10
但是,如果返回一个函数,就可以“延迟计算”:
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
L1 = calc_sum([1, 2, 3, 4])
print('调用calc_sum()并没有计算出结果,而是返回函数.结果为:', L1)
print('对返回的函数进行调用时,结果为:', L1())
结果为
调用calc_sum()并没有计算出结果,而是返回函数.结果为: <function calc_sum..lazy_sum at 0x00000000029C46A8>
对返回的函数进行调用时,结果为: 10
任务: 编写函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
分析: 先定义能计算乘积的函数,再将此函数返回。
不严谨的写法:
from functools import reduce
def calc_prod(lst):
def calc(x, y):
return x * y
ji = reduce(calc, lst)
return ji
f = calc_prod([1, 2, 3, 4])
print(f)
结果为: 24
尽管结果正确,但返回函数的思想不到位
严谨的写法:
def calc_prod(lst):
def lazy_prod():
def product(x, y):
return x * y
return reduce(product, lst, 1)
return lazy_prod
f = calc_prod([1, 2, 3, 4])
print(f())
结果为: 24
大家加油!
学习参考:https://www.imooc.com/code/6054