【发布时间】:2022-06-28 23:22:35
【问题描述】:
运行以下代码时:
import time
def ATimer(func,name='AClassFunction'):
def wrapper(*args,**kwargs):
start = time.perf_counter()
output = func(*args,**kwargs)
args[0].timers[name] = time.perf_counter()-start
return output
return wrapper
class AClass():
def __init__(self):
self.timers ={}
@ATimer(name='stuff')
def stuff(self):
j=0
for i in range(100):
j = j/2 + i
print(f'j is {j}')
@ATimer(name='morestuff')
def morestuff(self):
j=0
for i in range(100):
j = j + i
print(f'j is {j}')
AnInstance = AClass()
AnInstance.stuff()
AnInstance.stuff()
AnInstance.morestuff()
print(AnInstance.timers)
我得到 TypeError: ATimer() missing 1 required positional argument: 'func' on line 12.
但是鉴于 ATimer 是一个装饰器,它不应该只将stuff 或morestuff 作为输入吗?
【问题讨论】:
-
@ATimer(name) 需要返回一个接受函数作为参数的函数。