python – 将函数中的局部变量导入timeit

我需要计算跨越可变数据量的函数的执行时间.

def foo(raw_data):
   preprocessed_data = preprocess_data(raw_data)
   time = timeit.Timer('module.expensive_func(preprocessed_data)', 'import module').timeit()

但是,preprocessed_data不是全局变量.它不能从__main__导入.它是本子程序的本地.

如何将数据导入timeit.Timer环境?

解决方法:

将它传递给时间,而不是字符串. (不幸的是,这会引入一些额外的函数调用开销,因此只有当时间淹没那个开销时它才可行.)

time = timeit.timeit(lambda: module.expensive_func(data))

在Python 3.5及更高版本中,您还可以使用字符串语句指定显式全局字典到时间:

time = timeit.timeit('module.expensive_func(data)',
                     globals={'module': module, 'data': data})
上一篇:python – 实验确定矩阵行列式的计算复杂性


下一篇:Python3之装饰器