python学习的第七天(五):返回函数详解

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

首先看看python支持返回函数的基本语法

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g

这里,最外层的函数f会返回一个函数g,也就是函数g本身;
下面看看函数调用的过程;(接上面)

>>> x = f()   # 调用f()
call f()...
>>> x   # 变量x就是上面一个最外层函数返回的函数(不是函数值)
<function g at 0x1037bf320>
>>> x()   # x指向函数,因此可以调用,这里就是调用内层函数x()的过程
call g()...   # 调用x()就是执行g()函数定义的代码

 

    只返回函数的作用:
    返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:

def calc_sum(lst):
    return sum(lst)
>>>calc_sum([1,2,3,4])

    1
    2
    3

结果直接是:10

但是,可以通过返回函数思想写代码,就可以“延时计算”

def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum

    1
    2
    3
    4

下面是调用:
注意,下面代码并没有对函数进行执行计算出结果,而是返回函数。

>>> f = calc_sum([1, 2, 3, 4])
>>> f
<function lazy_sum at 0x1037bfaa0>

    1
    2
    3

对返回的函数进行调用时,才计算出结果

>>>f()
10

    1
    2

下面是一个例子:
请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
思想:先定义能计算乘积的函数,再将此函数返回。

def calc_prod(lst):
    def lazy_prod():
        def f(x,y):
            return x*y
        return reduce(f,lst,1)
    return lazy_prod

f = calc_prod([1, 2, 3, 4])
print f()
————————————————
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值