2013-06-21 20 views
0

如果我在Python 2.7,我剛開始使用Spyder IDE。spyderlib有趣的行爲與任何()和所有()

,如果我做

any(i ==1 for i in [1,2,3,4]) 

我得到的答案終端Python版本

True

而如果我做相同的Spyder我得到的迴應

<generator object <genexpr> at 0x3fc8af0> 

爲什麼這樣做?我缺少一個設置或可能這是一個不同版本的Python(它說2.7)

+0

你的意思是在IDE中的shell? – satoru

+0

Hi @ Satoru.Logic感謝您的關注。是的,第一個答案來自終端外殼。 (我在Linux上,所以如果我在終端窗口的命令提示符下鍵入'python')。 –

+0

我會在OSX下運行我的版本。 – satoru

回答

1

下面是從另一個related question約Spyder的Python的控制檯行爲報價:

一個Spyder的主要設計目標是使互動科學 計算儘可能無痛。爲了實現這一點,默認情況下 Spyder啓動了一個定製的交互式Python會話 啓動。它通過設置名爲PYTHONSTARTUP的環境 來實現此定製,該變量指定將在解釋器啓動時執行的腳本 的路徑。您可以在首選項...控制檯...高級設置下控制此 設置。默認情況下, Spyder指向scientific_startup.py,它將整個主機 科學模塊和函數直接導入到主命名空間中,因此 可以輕鬆快速地進行交互式探索。

因此,您所遇到的行爲是因爲你實際上是調用numpy版本anyall已直接放置到主命名空間。爲了驗證這一點,調用會得到返回

np.any(i ==1 for i in [1,2,3,4]) 

np.all(i ==1 for i in [1,2,3,4]) 
在Spyder的Python的控制檯

,和你相同的發電機對象。順便說一句,這最後兩個調用神奇地工作,因爲啓動腳本也import numpy as np。有關導入其他內容的更多詳細信息,請在Spyder Python控制檯提示符處鍵入scientific

+0

thansk @Jed 。將pythonpath改回默認解決了這個問題。 –

+1

@TahnoonPasha,科學啓動腳本只加載Spyder中的「交互式」解釋器。如果你想在不禁用科學啓動選項的情況下獲得普通的香草Python行爲,請在編輯器中創建一個腳本,按F6,將腳本設置爲「在新的專用Python解釋器中執行」。「如果您想在腳本完成之後與該解釋器進行交互,並且可以從該對話框啓用該腳本,然後運行該腳本,以這種方式啓動的解釋器不會導入科學啓動腳本,即使科學啓動腳本選項已啓用 – Jed

+0

另一個偉大的提示。再次感謝@Jed –