导入中的python导入

时间:2013-11-16 00:16:02

标签: 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

我必须在import secondcaller.py吗?这对我来说似乎是违反直觉的。

3 个答案:

答案 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

它压缩得更多。无论如何,你为什么这么做?