我正在尝试编写一个包装器,我希望在事件发生之前做一些事情然后做一些事情。 (例如,一个常规的时间间隔监视器)这两个函数的细节可以有所不同,我只想传递两个函数,一个在之前调用,一个在之后调用,每个函数都有其特定的参数。由于函数未在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?)
这里的参数会怎样?如何将它们分开,每次使用两个新函数时都不必重写包装函数?