这就是我正在做的事情:
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
的范围?像重新加载
之类的东西?
最佳答案
同时,我使用这个“解决方法”避免了 python shell 的不断重新启动:
>>> import my_module
>>> setup = '''
>>> from __main__ import my_module
>>> generator = my_module.any_func
>>> '''
通过在 python shell 的 __main__
范围内导入 my_module
并在 timeit
范围内引用它,可以重新加载更改在 __main__
范围内通过
>>> reload(my_module)
这样做timeit
将使用重新加载的模块。
我尝试在 timeit
的设置中执行 reload(my_module)
,但这会引发 NameError
。一方面,timeit
的作用域似乎是永久的,但另一方面,通过 reload
访问该作用域是不可能的。这是一种黑魔法……
关于python - 如何在timeit范围内更新代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337921/