6

这个问题是对以下 SO 帖子的回应:

如何腌制一个对象?

在那个线程中,OP 不小心在同一个模块的顶部导入了他自己的模块。为什么这不会导致无限循环?

4

5 回答 5

10

模块只导入一次。Python 意识到它已经被导入,所以不再这样做。

请参阅:http ://docs.python.org/tutorial/modules.html#more-on-modules

于 2010-08-24T16:51:34.413 回答
4

当 Python 遇到import语句时,它会sys.modules在执行任何操作之前先检查模块是否存在

于 2010-08-24T16:51:35.303 回答
2

import module如果模块已经被导入,则不重新加载模块

于 2010-08-24T16:51:25.470 回答
2

我相信 python 会跟踪哪些模块已经被导入,这样就不会浪费时间冗余导入。每个模块只能导入一次。

于 2010-08-24T16:51:34.473 回答
2

Python 中的导入会导致导入模块的命名空间绑定被放入当前命名空间(如果它们尚不存在)。如果你导入一个模块两次,它实际上只会被导入(并因此执行)一次。这就是为什么当您将模块导入自身时,实际上什么都没有发生,因为名称空间绑定已经存在于当前名称空间中。

于 2010-08-24T18:39:44.017 回答