python回调函数

2018-08-10  本文已影响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)

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

上一篇 下一篇

猜你喜欢

热点阅读