是否可以在python中使用相同的包装器包装多个函数?

时间:2017-12-07 21:33:54

标签: python

我正在尝试编写一个包装器,我希望在事件发生之前做一些事情然后做一些事情。 (例如,一个常规的时间间隔监视器)这两个函数的细节可以有所不同,我只想传递两个函数,一个在之前调用,一个在之后调用,每个函数都有其特定的参数。由于函数未在beforehands之前定义,因此它们可以包含任何类型的参数,因此我不能事先指定它们:

def function1(*args_for_function1):
    print("function 1 called with ", *args_for_function1)

def function2(*args_for_function2):
    print("function2 called with ", *args_for_function2)

现在,我希望能够在执行其他过程时使用这些,我可以将任意function1和function2传递给包装函数:

def wrapper(function1, function2):
    @wraps(function1, function2): #This is obviously wrong, but the result I want to achieve
    def async _helper(*args_for_1, *args_for_2): 
        while True:
            function1(*args_for_1)
            await next(some_previously_defined_process)()
            function2(*args_for_2)
            await some_timeout()
    return _helper

正在以正确的方式解决这个问题吗?

我想要的是能够定义function1和function2的一些具体实现,例如

def log_before(time, things_to_log, status_log):
    status_log.append(things_to_log)

def log_after(time, event_status, event_log):
    log2.append(event_status)

而不是每次我想要添加新函数时都必须重写包装函数,只是为了能够将函数放入包装器中:

real_function_to_call = wrapper(log_before, log_after, params?)

这里的参数会怎样?如何将它们分开,每次使用两个新函数时都不必重写包装函数?

0 个答案:

没有答案