从另一个python文件

时间:2017-11-09 12:45:33

标签: python namespaces

我已尝试使用Google和stackoverflow进行搜索,但我无法找到这个简单问题的答案,这个问题可能已多次被问过

在文件f1.py中,我有

import numpy as np

在文件f2.py中,我有

import f1
class One:
    mat = np.array([[1]]))

当我运行f2时,我收到错误消息“' np'未定义。我应该如何表达我的明显意图? 为了给出背景,我正在编写我的第一个不是玩具程序的python3程序。 f1代表实质代码。 f2应该是一个单元测试程序。但是,对python语法的一些基本误解阻碍了我的进步。我认为f1的导入会将np带入f2的命名空间,但它似乎并没有。

3 个答案:

答案 0 :(得分:1)

  

我认为f1的导入会将np带入f2的命名空间,但似乎没有。

事实上。每个模块都有自己的命名空间,您必须明确地导入您依赖的所有模块。因此,如果f2.py需要numpy,则必须明确导入它:

import numpy as np
import f1

class One:
    mat = np.array([[1]]))

注意:导入f1也不直接注入f1中定义的任何其他名称,因此如果f1中有一个函数“foo”,则在f2中你需要导入f1(如上例所示)和使用限定名称f1.foo()或明确导入名称“foo”,即from f1 import foo(但之后您只能访问foo,而不能访问f1中定义的任何其他名称。

答案 1 :(得分:0)

mat = np.array([[1]])

在此行中,np不在本地名称空间中,因为您尚未在本地名称空间中导入np

因此,如果你必须使用np,你应该使用以下行: -

mat = f1.np.array([[1]])

有关详细信息,请转到此链接import x and from x import

答案 2 :(得分:-1)

你应该像这样导入np:

from f1 import np