Python中返回函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值