我正在学习python,在玩timeit模块的时候,我发现了一个我无法解释的奇怪行为。你知道吗
#test.py
import timeit
def dictComp(I):
return {x: x for x in I}
t = timeit.timeit(number=5,
stmt='dictComp(I)',
setup='from test import dictComp\nI=range(1000000)')
print(t)
所以我试图通过调用一个用户定义的函数来计时dict理解词典的创建。 但是当我用上面的代码执行时,timeit似乎执行了两次。 解释器输出两个不同的时间。你知道吗
但是当我将设置字符串改为from __main__
而不是from test
时,timeit只运行一次(如预期的那样)。你知道吗
那么这两种说法有区别吗?
当模块是主模块时,写from [module] import [obj]
是错误的吗?
或者它与timeit的设置参数如何工作有关?你知道吗
请开导我。干杯。你知道吗
因为你包括了测试.py两次作为
__main__
和一次作为test
查看它!你知道吗__main__
模块不是test
模块,即使它们来自同一个文件。当执行命中时test.py
再次执行,这次作为test
模块而不是main
模块执行。(当执行第二次命中该行时,test
已经被导入,因此文件不会第三次运行。)把你的
timeit
呼叫这样的东西放进if __name__ == '__main__'
守卫中是一个很好的做法:如果没有,那么一定要导入
from __main__
,而不是from test
。你知道吗相关问题 更多 >
编程相关推荐