奇怪的Python导入行为

奇怪的Python导入行为,python,python-import,Python,Python Import,我已经在下面看了很长一段时间了,没有弄清楚到底发生了什么 我正在使用一个现有的Python项目,我有一个如下(简化)的目录结构: 我在函数模块的\uuuu init\uuuu.py文件中有以下代码(除其他代码外,在函数中): 奇怪的是,在下面的几行中,使用了名称test,Python并不抱怨它,即使在任何地方都没有导入test 我在上面两行之前和之后放了一些诊断消息,我看到globals()通过test模块更新 请注意,测试的初始化为空 这到底是怎么回事?导入系统加载函数.test.file1时

我已经在下面看了很长一段时间了,没有弄清楚到底发生了什么

我正在使用一个现有的Python项目,我有一个如下(简化)的目录结构:

我在
函数
模块的
\uuuu init\uuuu.py
文件中有以下代码(除其他代码外,在函数中):

奇怪的是,在下面的几行中,使用了名称
test
,Python并不抱怨它,即使在任何地方都没有导入
test

我在上面两行之前和之后放了一些诊断消息,我看到
globals()
通过
test
模块更新

请注意,
测试
初始化
为空


这到底是怎么回事?导入系统加载
函数.test.file1
时,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
行为是否有可能发生某种变化,导致导入
函数.test.fileX
时导入
名称,它需要设置属性链,使表达式
函数.test.file1
不产生AttributeError。也就是说

__import__('functions.test.file1')
有副作用吗

functions.test = <the test module object>
functions.test.file1 = <the file1 module object>
functions.test=
functions.test.file1=

由于
函数
包的
初始化
使用
函数
包的属性作为其全局变量,因此名称
测试的全局变量查找现在可以找到
函数。测试

非常感谢!这就解释了为什么会发生这种情况。尤其是最后一句。干杯
__import__('functions.test.file1')
functions.test = <the test module object>
functions.test.file1 = <the file1 module object>