首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式导入模块

隐式导入模块
EN

Stack Overflow用户
提问于 2014-08-13 23:32:45
回答 2查看 41关注 0票数 0

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

代码语言:javascript
复制
# 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)中,我运行以下命令:

代码语言:javascript
复制
python A.py

它给出了输出:

代码语言:javascript
复制
[1, 2, 3]

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

代码语言:javascript
复制
python B.py

我得到了输出:

代码语言:javascript
复制
NameError: name 'numpy' is not defined

为什么会这样呢?numpy不应该通过A隐式地导入到B中吗?

EN

回答 2

Stack Overflow用户

发布于 2014-08-13 23:37:01

当你这样做的时候

代码语言:javascript
复制
import A

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

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

代码语言:javascript
复制
import A
y = A.numpy.array([4, 5, 6])

或者:

代码语言:javascript
复制
from A import *

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

通常情况下,如果B需要numpy,它会直接导入。如果A正在对它随后导出的模块进行一些更改,您通常会希望显式地导入和引用它,以便向以后查看代码的每个人表明,您正在处理的不是该库的常规版本。

票数 3
EN

Stack Overflow用户

发布于 2014-08-13 23:37:58

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25290310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档