Spyder 不识别导入的术语
Spyder not recognising imported terms
我正在使用 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 文件调用相同的 zeros 函数时出现问题。
如果我在文件中创建函数 UseZeros() Test1.py
"""
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' 未定义。
File "C:/Users/Gareth/Test2.py", line 8, in
testArr2 = Test1.UseZeros()
File "Test1.py", line 7, in UseZeros
return zeros(4)
NameError: global name 'zeros' is not defined
有人能帮助我理解为什么在调用此函数时,IPython 控制台不再识别该方法吗?
我能找到的关于 similar problem 的唯一参考已在以前的版本中修复,与我遇到的不同。
我需要它工作的原因是我正在导入其他人使用的函数,这些人广泛使用了 zeros、ones、sin、cos 等命令,我不想拥有重新定义一切。
谢谢
在您使用它时,import
语句仍然具有模块中命名的所有函数和 classes:例如,import numpy
将允许您访问 ndarray
class 为 numpy.ndarray
。如果要将给定的 class 或函数导入顶级命名空间,则需要专门导入它:
from numpy import ndarray
如果您正在编写一些小东西并且不担心命名空间混乱,您可以这样做:
from numpy import *
在你的例子中,Spyder 的自动导入似乎只影响 __main__
级别的命名空间,所以你需要在任何导入的模块中放置正确的导入语句。
(Spyder developer here) Automatically load Pylab and NumPy modules 的选项是为了促进控制台中的交互工作而提供的,但它不打算在编辑器中编写代码,因为该代码不会 运行 在 Spyder 之外。
我不敢告诉你,但你的同事所做的是一个非常糟糕的做法,以我的拙见,我认为你能做的最好的事情就是指示 him/her 解决这个问题.
对于 fix/improve 这种情况,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 文件调用相同的 zeros 函数时出现问题。
如果我在文件中创建函数 UseZeros() Test1.py
"""
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' 未定义。
File "C:/Users/Gareth/Test2.py", line 8, in testArr2 = Test1.UseZeros()
File "Test1.py", line 7, in UseZeros return zeros(4)
NameError: global name 'zeros' is not defined
有人能帮助我理解为什么在调用此函数时,IPython 控制台不再识别该方法吗?
我能找到的关于 similar problem 的唯一参考已在以前的版本中修复,与我遇到的不同。
我需要它工作的原因是我正在导入其他人使用的函数,这些人广泛使用了 zeros、ones、sin、cos 等命令,我不想拥有重新定义一切。
谢谢
在您使用它时,import
语句仍然具有模块中命名的所有函数和 classes:例如,import numpy
将允许您访问 ndarray
class 为 numpy.ndarray
。如果要将给定的 class 或函数导入顶级命名空间,则需要专门导入它:
from numpy import ndarray
如果您正在编写一些小东西并且不担心命名空间混乱,您可以这样做:
from numpy import *
在你的例子中,Spyder 的自动导入似乎只影响 __main__
级别的命名空间,所以你需要在任何导入的模块中放置正确的导入语句。
(Spyder developer here) Automatically load Pylab and NumPy modules 的选项是为了促进控制台中的交互工作而提供的,但它不打算在编辑器中编写代码,因为该代码不会 运行 在 Spyder 之外。
我不敢告诉你,但你的同事所做的是一个非常糟糕的做法,以我的拙见,我认为你能做的最好的事情就是指示 him/her 解决这个问题.
对于 fix/improve 这种情况,Spyder 方面我们无能为力,因为我们不愿意提倡不良做法,抱歉。