我正在使用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方面,我们无能为力来修复/改善这种情况,因为我们不愿意推广不良做法,对不起。