一、回调函数介绍:
回调函数就是一个通过函数名调用的函数。如果你把函数的名字(地址)作为参数传递给另一个函数,当这个参数被用来调用其所指向的函数时,我们就说这是回调函数.
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.
上面是对回调函数的描述和解释,概念往往都显得生涉拗口,不易理解.
简单来说,我们可以这样理解回调,A实现了A1函数和A3函数,B实现了B2函数,B2函数接收一个函数名字作为参数,然后在B2内执行这个函数.
在实际应用时,A1函数调用了B2,B2函数接收函数A3作为参数,在B2内部执行A3函数,A3就是回调函数.
二、代码实现
from callback_B import trade_meeting def trade_cn_us(): """大大赴美,中美贸易磋商""" print() print("---++ 准备行程,大大赴美 ++---") trade_meeting(ready_info) print("---++ 会谈结束,带喜讯回国 ++---") def ready_info(): """准备商谈内容""" print() print("---++ 会议中提出要求 ++---") print() if __name__ == '__main__': trade_cn_us()
def trade_meeting(callback_func): """贸易会谈并签署协议""" print() print("---++ 与特朗普开始会谈 ++---") callback_func() print("---++ 会谈结束签署协议 ++---") print()
这个例子以中美贸易磋商作为示例:
在callback_A.py中实现了赴美进行贸易磋商并回国的函数trade_cn_us(),准备商谈资料(收集民众要求)的函数ready_info().
在callback_B.py中实现了在美国召开会议并签署协议的函数trade_meeting(callback_func).
可以理解为callback_A.py中实现的方法是在中国做的事情, callback_B.py中实现的方法是在美国做的事情(与现实的逻辑符合).
要实现赴美完成贸易磋商并回国的业务逻辑, trade_cn_us()调用了trade_meeting(callback_func), 在美国进行贸易会议时,需要调用国内准备会议资料的函数ready_info(), 用ready_info函数的名字作为参数传递给trade_meeting(),然后在trade_meeting()中执行.
这时候的ready_info()就是回调函数
三、运行结果
---++ 准备行程,大大赴美 ++--- ---++ 与特朗普开始会谈 ++--- ---++ 会议中提出要求 ++--- ---++ 会谈结束签署协议 ++--- ---++ 会谈结束,带喜讯回国 ++---
四、两个类之间的回调:
上面的回调是在两个不同的python文件中实现的,在面向对象编程中,两个不同的类之间也可以实现回调,参考代码如下:
class China(object): """国内事项""" def trade_cn_us(self): """大大赴美,中美贸易磋商""" print() print("---++ 准备行程,大大赴美 ++---") us = American() us.trade_meeting(self.ready_info) print("---++ 会谈结束,带喜讯回国 ++---") def ready_info(self): """准备商谈内容""" print() print("---++ 会议中提出要求 ++---") print() class American(object): """美国事项""" def trade_meeting(self, callback_func): """贸易会谈并签署协议""" print() print("---++ 与特朗普开始会谈 ++---") callback_func() print("---++ 会谈结束签署协议 ++---") print() if __name__ == '__main__': cn = China() cn.trade_cn_us()
这就是使用Python实现回调函数的过程,当有适合的需求场景时,按上面的方法即可实现~~