想象一下你对朋友说:
“等 pizza 到了叫我。”
然后你继续打游戏。
朋友负责盯着外卖,你负责等待被叫。
朋友 = 函数A
你交给他 “叫我” 这个动作 = 函数B
pizza到了 A 再调用 B → B 就是回调函数
一句话记住:
回调函数 == 我把函数交给别人,由别人决定什么时候叫它。

为什么需要回调?(现实中的痛点)
如果所有事情都得你亲自盯,比如:
-
下载文件完成后做什么? -
按钮按下去做什么? -
排序时,用哪个标准比较? -
数据处理时,每条数据怎么处理?
…
那代码会变成一个巨坨的 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秒总结
-
回调函数:别人决定什么时候叫你的函数 -
高阶函数:能接收函数的函数 -
回调不是递归 -
目的:让逻辑可替换、流程更灵活 -
广泛用于事件、异步、处理流程自定义
原文链接:https://www.zsiss.com/9790.html,转载请注明出处。

评论0