隐式导入模块

时间:2014-08-13 15:32:45

标签: python

在目录中,我有两个文件:A.pyB.py。以下是他们的内容:

# A.py

import numpy
x = numpy.array([1, 2, 3])
print x

# B.py

import A
y = numpy.array([4, 5, 6])
print y

从命令提示符(Windows 8),我运行以下命令:

python A.py

给出输出:

[1, 2, 3]

但是当我运行以下命令时:

python B.py

我得到了输出:

NameError: name 'numpy' is not defined

这是为什么?难道不能通过A?

隐式导入B中

2 个答案:

答案 0 :(得分:3)

当你这样做时

import A

它会引入文件A.py中的所有可导出函数和变量,但名称空间前缀为A

假设您不想在B中再次导入numpy(正常选项),那么您的代码需要是

之一
import A
y = A.numpy.array([4, 5, 6])

或者:

from A import *

前者通过A获得numpy,前缀为A(因为它是首次导入的地方),后者明确地从A中导入所有内容而没有新的前缀。后者的缺点是它可以带来厨房水槽的其余部分,所以对于复杂的模块来说通常不是一个好的计划。

通常情况下,如果B需要numpy,它会直接导入。如果A对其随后导出的模块进行了一些更改,您通常会希望明确导入并引用它,以便在以后查看代码的每个人都标记您未处理该库的常规版本

答案 1 :(得分:1)

为什么不把import numpy放在B.py.

目前您的import A是多余的,因为您没有引用它。请先阅读教程。