美文网首页
python回调函数

python回调函数

作者: 日月神父 | 来源:发表于2018-08-10 15:45 被阅读0次

    通常在实际应用中有人写的框架中包含了一个回调函数,需要我们传入一个函数作为参数(这种方式不是面向切面的编程,这个我们暂且不论框架设计的问题),回调函数是不带参数的,但我们开发的函数由于复用的需要设计了函数参数,那么问题来了,如何把我们设计的函数传给框架中作为回调呢?

    框架代码如下:

    class Framework:
        def __init__(self, callback):
            self.callback = callback
    
        def run(self):
            self.setup()
            # 框架中并未对回调函数传参数
            self.callback()
            self.teardown()
    
        def setup(self):
            pass
    
        def teardown(self):
            pass
    

    我们设计的函数是带参数的,比如

    def your_function(level, message):
        print(level, message)
    

    这样我们需要为重新定义函数来满足框架中的回调吗?怎么做?

    1. 使用闭包
    # 方法一 使用闭包
    def configured_wrapper_logger(level, message):
        def _configured_logger():
            your_function(level, message)
    
        return _configured_logger
    
    1. 使用lambda
    # 方法二,使用lambda
    configured_lambda_logger = lambda: your_function(logging.ERROR, "ERROR logger")
    
    1. 使用class的call
    # 方法三 使用class __call__
    class ConfiguredLogger:
        def __init__(self, level, msg):
            self.level = level
            self.msg = msg
    
        def __call__(self):
            your_function(self.level, self.msg)
    

    这三种方式都可以复用自定义函数的前提下,方便的传递给框架

    相关文章

      网友评论

          本文标题:python回调函数

          本文链接:https://www.haomeiwen.com/subject/lhpftftx.html