最后运行得完全超出预期 import time from functools import wraps
def timefunc(func):
"""统计一个函数的运行时间"""
@wraps(func)
def wrapper(*args, **kwargs):
print('-------函数开始执行--------')
start_time = time.time() # 记录起始时间
func(*args, **kwargs) # 调用被装饰函数
end_time = time.time() # 记录结束时间
run_time = end_time - start_time
print("function %s runtime is %s " % (func.__name__, run_time))
print('-------函数结束执行--------')
return wrapper
@timefunc
def factorial(num):
"""计算一个正整数的阶乘"""
if not isinstance(num, int):
raise TypeError("参数必须为整型!")
elif num <= 0:
raise ValueError("请输入正整数!")
elif num == 1:
return 1
else:
return num * factorial(num-1)
if __name__ == '__main__':
factorial(4)
1
kkzxak47 2018-03-15 20:42:06 +08:00 via Android
你先问怎么实现,然后把实现贴出来了。请问,你在问什么?
|
3
zhzy 2018-03-15 22:05:45 +08:00 via iPhone
请善用搜索: http://bfy.tw/H7vO
|
4
Arthur2e5 2018-03-16 02:08:00 +08:00 via Android
https://stackoverflow.com/questions/43432956/how-a-decorator-works-when-the-argument-is-recursive-function
一模一样,人还知道至少要用一个更靠谱的计时呢 你不要直接包,等到最后再用 timefunc(factorial)(4) 之类的只包一次就是了… |