2017-06-12 219 views
0

我使用Spyder 3.1.2(Python 2.7.13)。作爲啓動的一部分,IPython控制檯設置爲「Automatically load Pylab and NumPy modules」。Spyder無法識別導入的條款

時,我想使用的方法NumPy.zeros(形狀),我只是把它在IPython的控制檯爲零:

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

試圖調用同一個零,從一種功能,當我的問題就來了單獨的python文件。

如果我在一個文件中創建一個功能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 =零(5)工作正常,但是當調用Test1.UseZeros()時,我得到一個錯誤,說明全局名稱'零'沒有定義。

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的唯一參考在之前的版本中得到修復,與我所遇到的不同。

我需要這個工作的原因是我導入了其他人使用的功能,這些功能被廣泛使用了諸如零,單詞,罪,COS等命令,而且我不想重新定義一切。

感謝

回答

0

Spyder的開發商在這裏)的選項自動加載提供方便在控制檯交互工作Pylab和NumPy的模塊,但它並不意味着在編輯器中編寫代碼,因爲該代碼將無法運行之外的Spyder 。

我不敢告訴你,但你的同事做了什麼是一種非常糟糕的做法,並且我認爲你所能做的最好的事情就是指導他/她解決這個問題。

在Spyder方面我們沒有辦法解決/改善這種情況,因爲我們不願意宣傳不好的做法,對不起。

+0

感謝卡洛斯,我很欣賞這些反饋。將工作在我的同事身上,以便我們可以切換到更傳統的工作結構化方式。 – GarethC

+0

非常感謝您的理解,我知道解決這個問題可能需要您一段時間。 –

+0

一點也不,我主要擔心的是我無法工作,應該這樣做。高興地發現它的設計不會那樣工作:) – GarethC

1

當你使用它時,import聲明仍然具有模塊內指定的所有函數和類:import numpy,例如,將允許您訪問ndarray類爲numpy.ndarray。如果要導入一個給定的類或函數到頂級命名空間,你就需要專門導入:

from numpy import ndarray 

如果你正在寫的東西小,不擔心弄亂的命名空間,你可以這樣做:

from numpy import * 

在你的情況,與Spyder的自動進口它似乎隻影響__main__級別的命名空間,所以你需要把正確的導入語句在任何導入模塊。

+0

嗨Ben 感謝您的回覆。問題是我不想修改我的同事代碼。這個問題似乎不是導入,但重新定義了函數,例如,zeros = np.zeros,cos = np.cos等。 如果您向Test1添加了零= np.zeros,我提供的代碼就可以工作。 py 我希望能有一種方法來使用他的代碼,而不必添加所有的導入和定義,因爲我通常可以不指定就調用函數。 – GarethC

+0

你知道你的同事是如何建立的嗎?一般來說,我建議只調用'np.zeros',它會清楚地說明函數的定義和查找文檔的位置。 –

+0

我的同事與我的設置相同。但是從同一個python文件中調用他的方法。但我想從我自己的python文件中調用他的方法,這是我在我的簡單示例中演示的問題的來源。 – GarethC