回调函数 Callback,到底在“回”什么?

想象一下你对朋友说:

“等 pizza 到了叫我。”

然后你继续打游戏。

朋友负责盯着外卖,你负责等待被叫。

朋友 = 函数A

你交给他 “叫我” 这个动作 = 函数B

pizza到了 A 再调用 B → B 就是回调函数

一句话记住:

回调函数 == 我把函数交给别人,由别人决定什么时候叫它。

640-11

为什么需要回调?(现实中的痛点)

如果所有事情都得你亲自盯,比如:

  • 下载文件完成后做什么?
  • 按钮按下去做什么?
  • 排序时,用哪个标准比较?
  • 数据处理时,每条数据怎么处理?

那代码会变成一个巨坨的 IF 套娃地狱!!!

所以程序世界发明了一个很清爽的方式:

“不同场景下的逻辑”交给别人,让别人在合适的时间去执行。

这就是回调诞生的原因!!!

三行代码彻底理解回调(极简例子)

def work(fn):
    print("开始工作...")
    fn()  # 在某个时机执行传入的函数
    print("工作结束")

写一个动作传进去:

def drink():
    print("喝水休息一下")

使用:

work(drink)

输出:

开始工作...
喝水休息一下
工作结束

嗯!这里的drink就是work的回调!

work不关心drink具体做什么,

drink也不关心什么时候被叫。

它们各做各的,互不耦合,非常优雅。

如果换成别的动作?(回调最强的地方来了)

def stretch():
    print("伸个懒腰")

work(stretch)

输出:

开始工作...
伸个懒腰
工作结束

你看,只改“回调函数”,流程就完全变了。

回调函数是一种动态替换行为的能力。

回调函数 ≠ 递归函数(最容易搞混)

  • 回调:把 B 传给 A,让 A 在未来某时刻执行 B
  • 递归:B 在执行自己(B 调 B)

一句话:

回调是别人叫我,递归是我叫我。

回调函数 ≈ 高阶函数的“儿子”

  • 高阶函数:能接收函数的函数
  • 回调函数:被传进去执行的那个函数

所以结构是:

高阶函数:负责调用

回调函数:负责被调用

举个栗子

sorted(data, key=callback_fn)

sorted 是高阶函数 key 是你的回调函数(决定排序规则)

回调常见的真实用途

  • GUI / 游戏:按钮被点后做什么
  • 网络请求完成后执行某动作
  • 文件读取完毕后的处理逻辑
  • 事件监听机制
  • 排序/过滤/映射自定义规则

程序世界里几乎所有 “事件驱动”的地方,都在用回调。

30秒总结

  1. 回调函数:别人决定什么时候叫你的函数
  2. 高阶函数:能接收函数的函数
  3. 回调不是递归
  4. 目的:让逻辑可替换、流程更灵活
  5. 广泛用于事件、异步、处理流程自定义
原文链接:https://www.zsiss.com/9790.html,转载请注明出处。
0

评论0

请先
响应式安防协会网站模板5424
响应式安防协会网站模板5424
5分钟前 有人购买 去瞅瞅看

社交账号快速登录