向回调函数循环添加额外参数

Add extra parameters to callback function loop

我有一个包装器来为列表中的某些函数的执行计时。大多数这些函数都有一个相同的参数:era。我 运行 功能如下所示。但是,某些函数需要额外的参数,例如函数 dummy_function()。我一直在寻找一种能够以 Pythonic 方式添加此参数的方法。我找到了一些解决方案,但它们非常丑陋且不可扩展。任何帮助或建议将不胜感激!

def dummy_function(self, period, letter='A'):
    """ Debugging purposes only """
    print(f'This function prints the letter {letter}.')
    from time import sleep
    sleep(3)

def timed_execution(callbacks, era):
    for callback in callbacks:
        start_time = time.time()
        callback(era)
        end_time = time.time()
        print(f'{callback.__name__} took {end_time-start_time:.3f}s')

    
def calculate_insights(era):
    timed_execution([
        dummy_function,
        another_function,
        yet_another_function,
    ], era)

calculate_insights(era)

也许最好的方法是实际传递各自函数的参数,或者只是尝试使用包装器来计算函数的时间。

代码取自another question

from functools import wraps
from time import time

def timing(f):
    @wraps(f)
    def wrap(*args, **kw):
        ts = time()
        result = f(*args, **kw)
        te = time()
        print 'func:%r args:[%r, %r] took: %2.4f sec' % \
          (f.__name__, args, kw, te-ts)
        return result
    return wrap

然后你可以按照

的方式做一些事情
@timming
def dummy_function(self, period, letter='A'):
    """ Debugging purposes only """
    print(f'This function prints the letter {letter}.')
    from time import sleep
    sleep(3)

    
def calculate_insights():
    dummy_function(era)

或者您可以只是将所有参数传递给每个回调的字典,但这对我来说听起来不像 pythonic。