python基础之回调函数以及返回函数与闭包

一 回调函数

回调函数就是一个通过函数指针调用的函数,如果你把函数的指针(地址)作为一个参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,这就是我们说的回调函数.

简单来说:回调函数就是把函数当成一个参数传递到函数中.

需求:现在酒店提供免费叫醒服务,叫醒的方式有多种,你可以自己选择,比如夺命电话连环call, 或者是早起冷水迎头泼,随你自己喜欢,只要你提前预约,则酒店工作人员将在你指定的时间用你喜欢的方式叫醒你.

def  wake_call(time):
    #第一种叫醒服务
    print(time,"使用夺命电话连环call叫醒主人")

def wake_water(time):
    #第二种叫醒服务
    print(time,"使用早起泼冷水的方式叫醒主人")

def call_wake(time, func_name):
    # 这个很重要,这个就是酒店服务业务的系统业务
    #这是实现回调函数的核心
    # time :预约时间
    # func_time:回调函数名
    # return :调用的函数的结果
    return func_name(time)

#调用函数
#wake_call 被调用的函数就是回调函数
call_wake("凌晨7点", wake_call)

拓展: 编程分为两大类:系统编程和应用编程,所谓的系统编程简单来说就是编写库,而应用编程就是利用写好的各种库来编写具体的某种功能的程序,也就是应用. 系统程序员会在自己写的库中留下API(应用编程接口),以供应用程序员使用.

当程序跑起来,一般情况下,应用程序会时常通过API调用库中所预备好的函数,但是有些库函数却要求应用先给它传递一个函数,好在合适的时候调用,以完成目标,这个被传入的后来又被调用的函数成为回调函数

二 返回函数

函数作为返回值

在python中除了可以接受函数作为参数外,还可以把函数作为结果值返回.

需求:实现一个可变参数的求和.通常是这么定义的:

def calc_sum(*args):
    sum = 0
    for i in args:
        sum += i
    return sum

现在需求有变,现在我不需要立即求和,而是在后面的代码中,根据需要再进行计算,这时候,我们可以不返回求和的结果,而是返回求和的函数.

def lazy_sum(*args):
    def calc_sum():
        sum = 0
        for i in args:
            sum += i
        return sum
    return calc_sum

当我们调用lazy_sum()时,返回的并不是求和的结果而是求和的函数

>>> f = lazy_sum(1, 2, 3, 4)
>>> f
<function lazy_sum.<locals>.calc_sum at 0x101b61598>

这时候调用f时,才真正计算求和的结果

>>> f()
10
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值