自定义timeit函数的perf_counter计算结果异常,求问题原因
自定义timeit函数结果异常的原因
你的代码出现异常结果主要有两个问题:
参数名不匹配:调用
timeit时你传了n=100,但函数定义里的运行次数参数是num,这个关键字参数根本没被识别,实际执行的是默认的10000次循环。无副作用函数被解释器优化:你传入的
lambda x: x<12是纯函数,没有任何副作用(比如修改外部状态、IO操作),而且循环中调用后没有使用返回值。Python解释器会自动跳过这种无意义的函数调用,相当于循环空转,所以耗时会异常偏低。
修正方案
调用时将
n=100改为num=100,确保指定的运行次数生效:print(MyTimeit().timeit(lambda x: x<12, 10, num=100))为了避免函数调用被优化,在循环中保留函数返回值:
修改timeit方法的循环逻辑:def timeit(self, function: Callable, *parameters, num: int=10000): start = perf_counter() result = None if not parameters: for _ in range(num): result = function() else: for _ in range(num): result = function(*parameters) return perf_counter()-start
内容的提问来源于stack exchange,提问作者Jason Grace
相关产品推荐
相关产品推荐

