Spyder无法识别导入的字词

时间:2017-06-12 20:00:22

标签: python numpy ipython spyder

我正在使用Spyder 3.1.2(Python 2.7.13)。作为启动的一部分,IPython控制台设置为“Automatically load Pylab and NumPy modules”。

当我想使用方法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()时,我收到一条错误,指出未定义全局名称“零”。

  

文件“C:/Users/Gareth/Test2.py”,第8行,in       testArr2 = Test1.UseZeros()

     

使用UseZeros中的第7行文件“Test1.py”       返回零(4)

     

NameError:未定义全局名称“零”

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

我可以找到similar problem的唯一引用已在之前的版本中修复,与我遇到的不同。

我需要这个工作的原因是我正在导入其他人使用的函数,这些函数已经广泛使用了诸如零,一,sin,cos等命令,而且我不想重新定义一切。

由于

2 个答案:

答案 0 :(得分:1)

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

from numpy import ndarray

如果您正在编写一些小而且不担心命名空间混乱的内容,那么您可以这样做:

from numpy import *

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

答案 1 :(得分:0)

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

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

我们无法在Spyder方面做些什么来修复/改善这种情况,因为我们不愿意推广不良做法,抱歉。