导入中的python导入
我试图在模块中导入一个模块,然后从顶部访问较低级别的模块,但该模块不可用。这是正常的行为吗导入中的python导入,python,import,Python,Import,我试图在模块中导入一个模块,然后从顶部访问较低级别的模块,但该模块不可用。这是正常的行为吗 # 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 我是否必须在caller.py中导入第二个?这似乎与我的直觉相反。您可以使用 import
# 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
我是否必须在caller.py
中导入第二个?这似乎与我的直觉相反。您可以使用
import first
print first.second.some_var
仅通过导入第一个
就让第二个
自动出现在命名空间中,这将导致大量冲突
这也会起作用
from first import second
print second.some_var
通配符的使用
from first import *
不鼓励这样做,因为如果有人首先向添加额外的属性/函数
,如果他们碰巧选择了您可以使用的相同名称,他们可能会覆盖您在本地使用的属性
import first
print first.second.some_var
仅通过导入第一个
就让第二个
自动出现在命名空间中,这将导致大量冲突
这也会起作用
from first import second
print second.some_var
通配符的使用
from first import *
不鼓励这样做,因为如果有人向first
添加额外的属性/函数,如果他们碰巧选择了相同的名称,他们可能会覆盖您在本地使用的属性import first
会将名称first
导入全局命名空间,但它不会将所有内容从首先导入到名称空间中。因此,您可以执行以下操作之一:
- 通过
第一次访问第二次
:
import first
print first.second.some_var
- 将
second
直接导入caller.py的命名空间:
from first import second
print second.some_var
请注意,您可以使用from first import*
将first
中的所有名称导入命名空间,但通常不建议这样做。import first
将名称first
导入全局命名空间,但它不会将first
中的所有内容导入命名空间。因此,您可以执行以下操作之一:
- 通过
第一次访问第二次
:
import first
print first.second.some_var
- 将
second
直接导入caller.py的命名空间:
from first import second
print second.some_var
请注意,您可以使用from first import*
将first
中的所有名称导入命名空间,但通常不建议这样做。请改用:
from first import second
print first.second.some_var
它也被压缩了很多。你为什么要这样做?改用:
from first import second
print first.second.some_var
它也被压缩了很多。你为什么要这样做?感谢你解释为什么不鼓励使用通配符感谢你解释为什么不鼓励使用通配符循环导入可能会导致恼人的问题,因此最好避免这种导入模式。如果第一个
和第二个
都需要访问一些变量
,您可以创建第三个
模块并将一些变量
放在其中。循环导入可能会导致恼人的问题,因此最好避免这种导入模式。如果first
和second
都需要访问some_var
,您可以创建third
模块,并将some_var
放在其中。基本上,我在许多项目中使用公共库文件(在本例中,许多文件的角色为“second”)然后,每个项目都有更高级别的库文件(即在本例中有许多“first”角色的文件)。所以每个项目只需要知道“第一”,而“第一”只需要知道“第二”。我知道第一个扩展第二个的类结构是理想的,但我只是想看看我是否可以使用模块和避免类…基本上我有很多项目中使用的公共库文件(在本例中,许多文件的角色是“second”),然后每个项目都有更高级别的库文件(即在本例中有许多扮演“第一”角色的文件)。因此每个项目只需要知道“第一”,而“第一”只需要知道“第二”。我知道一个带有first extends second
的类结构是理想的,但我只是想看看是否可以使用模块和避免类。。。