python回調(diào)函數(shù)

通常在實際應(yīng)用中有人寫的框架中包含了一個回調(diào)函數(shù),需要我們傳入一個函數(shù)作為參數(shù)(這種方式不是面向切面的編程,這個我們暫且不論框架設(shè)計的問題),回調(diào)函數(shù)是不帶參數(shù)的,但我們開發(fā)的函數(shù)由于復(fù)用的需要設(shè)計了函數(shù)參數(shù),那么問題來了,如何把我們設(shè)計的函數(shù)傳給框架中作為回調(diào)呢?

框架代碼如下:

class Framework:
    def __init__(self, callback):
        self.callback = callback

    def run(self):
        self.setup()
        # 框架中并未對回調(diào)函數(shù)傳參數(shù)
        self.callback()
        self.teardown()

    def setup(self):
        pass

    def teardown(self):
        pass

我們設(shè)計的函數(shù)是帶參數(shù)的,比如

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

這樣我們需要為重新定義函數(shù)來滿足框架中的回調(diào)嗎?怎么做?

  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)

這三種方式都可以復(fù)用自定義函數(shù)的前提下,方便的傳遞給框架

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容