我正在尝试导入模块中的模块,然后从顶部访问较低级别的模块,但它不可用。这是正常行为吗?
# caller.py
import first
print second.some_var
# first.py
import second
# second.py
some_var = 1
正在运行caller.py
会出错
NameError: name 'second' is not defined
我必须在import second
内caller.py
吗?这对我来说似乎是违反直觉的。
答案 0 :(得分:3)
您可以使用
import first
print first.second.some_var
仅通过导入second
自动在名称空间中出现first
会导致很多冲突
这也可行
from first import second
print second.some_var
使用通配符
from first import *
不建议使用因为如果有人向first
添加额外的属性/功能,如果他们碰巧选择相同的名称,他们可能会覆盖您在本地使用的属性
答案 1 :(得分:1)
import first
会将名称first
导入全局命名空间,但不会将first
中的所有内容导入命名空间。因此,您可以执行以下操作之一:
通过second
访问first
:
import first
print first.second.some_var
将second
直接导入caller.py的命名空间:
from first import second
print second.some_var
请注意,您可以使用from first import *
将first
中的所有名称导入命名空间,但通常不鼓励这样做。
答案 2 :(得分:0)
改为使用:
from first import second
print first.second.some_var
它压缩得更多。无论如何,你为什么这么做?