【发布时间】:2022-01-06 00:34:06
【问题描述】:
我正在创建一个装饰器,主要用于 timeit 它装饰的任何功能。而且我无法正确处理。抛出max recursion depth error。有人可以帮我理解它为什么会发生以及如何实现这个 timeit 实现。 我不想使用time 模块
import timeit
from functools import wraps
def tool(func):
"""Include debug statement and timeit setup"""
@wraps(func)
def wrapper(*args):
print func.__doc__, args,
res = func(*args)
print res
CODE = "func{args}".format(args=args)
times = timeit.repeat(
stmt=CODE,
setup="from __main__ import {func} as func".format(func=func.__name__),
repeat=3, number=10000)
print times
return wrapper
【问题讨论】:
-
可能是因为导入的东西让你得到了已经装饰的函数,你必须使用非字符串版本的 timeit 调用
-
你的装饰函数中有timeit,所以当你调用它时,它会调用timeit,而timeit正在调用你的函数,它里面有timeit等等。所以这里有一个递归。