Spyder无法识别导入的术语



我正在使用Spyder 3.1.2(Python 2.7.13)。作为启动的一部分,IPython控制台设置为"自动加载Pylab和NumPy模块"。

当我想使用方法NumPy.zeros(shape)时,我可以在IPython控制台中将其称为零:

In [12]: zeros(5)
Out[12]: array([ 0.,  0.,  0.,  0.,  0.])

当尝试从单独的 python 文件中调用相同的零函数时,我的问题出现了。

如果我在文件 Test1.py 中创建一个函数 UseZeros()

"""
filename: Test1.py
"""
def UseZeros():
return zeros(4)

我从一个单独的文件中调用它,Test2.py:

"""
filename: Test2.py
"""
import Test1
testArr1 = zeros(5)
testArr2 = Test1.UseZeros()

在此脚本中,testArr1 = zeros(5) 工作正常,但是在调用 Test1.UseZeros() 时,我收到一个错误,指出未定义全局名称"zeros"。

文件 "C:/Users/Gareth/Test2.py",第 8 行,在 testArr2 = test1.UseZeros()

文件"Test1.py",第 7 行,在 UseZeros 中 返回零(4)

名称错误:未定义全局名称"零">

有人能够帮助我理解为什么在调用此函数时,IPython 控制台不再识别该方法?

我能找到的类似问题的唯一参考在以前的版本中得到了修复,并且与我遇到的不同。

我需要它工作的原因是我正在导入其他人使用的函数,他们广泛使用了零、一、sin、cos 等命令,我不想重新定义一切。

谢谢

当你使用它时,import语句仍然具有模块中命名的所有函数和类: 例如,import numpy将允许您以numpy.ndarray访问ndarray类。 如果要将给定的类或函数导入顶级命名空间,则需要专门导入它:

from numpy import ndarray

如果你正在编写一些小的东西,并且不担心命名空间混乱,你可以这样做:

from numpy import *

在您的情况下,使用Spyder的自动导入似乎只影响__main__级命名空间,因此您需要在任何导入的模块中放置适当的导入语句。

(Spyder开发人员在这里)提供自动加载 Pylab 和 NumPy 模块的选项是为了方便控制台中的交互式工作,但它并不意味着在编辑器中编写代码,因为该代码不会在 Spyder 之外运行。

我不敢告诉你,但你的同事所做的是一个非常糟糕的做法,以我的拙见,我认为你能做的最好的事情就是指示他/她解决这个问题。

在Spyder方面,我们无能为力来修复/改善这种情况,因为我们不愿意推广不良做法,对不起。

最新更新