我正在使用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等命令,而且我不想重新定义一切。
由于
答案 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方面做些什么来修复/改善这种情况,因为我们不愿意推广不良做法,抱歉。