如何在timeit范围内续订代码?

时间:2016-03-31 15:41:35

标签: python scope reload timeit

这就是我正在做的事情:

In [9]: setup = '''
import my_module              
generator = my_module.any_func(1, 'two')
'''

In [10]: timeit.timeit('list(generator)', setup=setup, number=1000)
Out[10]: 4.6911962032318115

如果我更改my_module并运行

In [11]: timeit.timeit('list(generator)', setup=setup, number=1000)

再次,timeit无法识别这些更改。目前我关闭IPython并再次执行所有这些操作。

是否有可能更新timeit的范围?像reload

这样的东西

1 个答案:

答案 0 :(得分:1)

同时我避免使用这种“解决方法”不断重启python shell:

>>> import my_module
>>> setup = '''
>>> from __main__ import my_module
>>> generator = my_module.any_func
>>> '''

通过在python shell的my_module范围内导入__main__并在timeit范围内返回它,可以通过__main__范围重新加载变换

>>> reload(my_module)

这样做timeit将使用重新加载的模块。

我尝试在reload(my_module)的设置中执行timeit,但这会引发NameError。一方面,似乎timeit的范围是永久性的,另一方面,通过reload在此范围内访问是不可能的。这是一种黑魔法......