def my_timer(orig_func):
"""returns time orig_func took to run"""
import time
def wrapper(*args, **kwargs):
t1 = time.time()
result = orig_func(*args, **kwargs)
t2 = time.time() - t1
print('{} ran in: {} sec'.format(orig_func.__name__, t2)) # this is interpreted second
return result # this is interpreted first
return wrapper
@my_timer
def display_info(name, age):
print('display_info ran with arguments ({}, {})'.format(name, age))
display_info("Aldona", 22)
我希望这个包装器首先运行print语句,然后返回包含函数值的result
变量。为什么不是这种情况?
答案 0 :(得分:0)
您误会了打印输出的位置。您的display_info
函数将打印结果,并且不返回任何有用的信息(默认情况下返回None
)。因此,在wrapper
中,是orig_func(...)
调用导致打印输出发生在与计时相关的print
调用之前。
如果您希望输出的顺序符合您的期望,则无需更改装饰代码,而是需要将其构建的字符串从display_info
更改为return
,然后更改调用代码执行print(display_info(...))
。但是然后您可能想要重命名display_info
函数,因为它本身不会进行任何显示。...