向回调函数循环添加额外参数
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。
我有一个包装器来为列表中的某些函数的执行计时。大多数这些函数都有一个相同的参数: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。