gpt4 book ai didi

Python: 'from module' 与 'from__main__' 使用 timeit 的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 05:20:59 24 4
gpt4 key购买 nike

我正在学习 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)

因此,我尝试通过调用用户定义的函数来使用字典理解来计算字典的创建时间。但是当我使用上面的代码执行此操作时,timeit 似乎执行了两次。解释器输出两个不同的时间。

但是当我将设置字符串更改为 from __main__ 而不是 from test 时,timeit 仅运行一次(如预期)。

那么这两种说法有区别吗?当该模块为主模块时,这样写 from [module] import [obj] 是否错误?或者它与 timeit 的设置参数如何工作有关?

请赐教。干杯。

最佳答案

__main__ 模块不是 test 模块,即使它们来自同一个文件。当执行命中时

from test import dictComp

test.py 再次执行,这次作为 test 模块而不是 main 模块。 (当执行第二次到达该行时,test 已被导入,因此该文件不会第三次运行。)

最好将 timeit 调用之类的内容放入 if __name__ == '__main__' 防护中:

if __name__ == '__main__':
t = timeit.timeit(...)

print(t)

如果不这样做,那么一定要导入 from __main__ 而不是 from test

关于Python: 'from module' 与 'from__main__' 使用 timeit 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com