zoukankan      html  css  js  c++  java
  • python回调函数

    一、回调函数介绍:

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

    回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.

    上面是对回调函数的描述和解释,概念往往都显得生涉拗口,不易理解.

    简单来说,我们可以这样理解回调,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()
    callback_A.py
    def trade_meeting(callback_func):
        """贸易会谈并签署协议"""
        print()
        print("---++  与特朗普开始会谈  ++---")
        callback_func()
        print("---++  会谈结束签署协议  ++---")
        print()
    -callback_B.py

    这个例子以中美贸易磋商作为示例:

    在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实现回调函数的过程,当有适合的需求场景时,按上面的方法即可实现~~

  • 相关阅读:
    多线程自动化运维linux的尝试 优化二
    多线程自动化运维linux的尝试 优化一
    多线程自动化运维linux的尝试
    mysql root 没有任何权限
    oracle hint 知多少
    pandas 实战笔记
    ICM issue IcmPlAllocBuf: MpiGetOutbuf failed (rc = 14 (MPI_ESTALE: outdated MPI handle))
    利用python在Oracle数据库中生成密码字典库
    nginx 配置的一些参数
    nginx四层代理
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11882221.html
Copyright © 2011-2022 走看看