適合我。當你給出命令%edit printval
時,你確定函數名printval
已經在你的ipython命名空間嗎?您可以通過查看printval?
是否按預期將您的功能引用到您的功能,或者是否發生錯誤來檢查。如果printval
不在您的ipython命名空間中,那麼ipython無法知道您的意思是printval
。
例如,如果你已經做了from mymodule import printval
,
然後%edit printval
應該工作。
如果這不能解決問題,請提供一個最簡單的示例,其中包括所有重現問題的步驟。從用戶這個隨訪信息後
UPDATE:「File: c:\users\tester\<ipython-input-5-cc5d372a3507>
」
這表明函數沒有因爲通常做了文件中定義的,而是互動的IPython的提示。這使答案複雜化,因此:
當在一個(非臨時)文件中定義一個函數時,%edit functionname
在ipython的所有版本中按照需要工作 - 它將打開該文件進行編輯。
但是,當在ipython提示符下以交互方式定義函數時(如本用戶的情況),那麼實際行爲取決於ipython的版本和您正在使用的ipython/jupyter接口。人們想要打開一個臨時文件,將函數定義複製到該文件中進行編輯,然後在編輯器關閉後,重新執行函數定義(即,要重新定義該函數)基於這些編輯。實際上,這種所需的行爲是在簡單的文本模式ipython終端中實現的(例如,如果在Canopy命令提示符處鍵入ipython
)。
然而,這種期望的行爲從未在IPython中/ jupyter QtConsole實現(例如,如果你在一個Canopy命令提示符下鍵入jupyter qtconsole
),而據我所知,這是目前不jupyter團隊策劃,最其工作似乎集中在jupyter筆記本和jupyter實驗室項目上。
由於Canopy是一個GUI應用程序,Canopy的ipython提示符是QtConsole,而不是ipython終端提示符。因此,Canopy不會實現您想要的行爲,也不會在可預見的將來實現。
(小)好消息是,在最新版本的QtConsole中,錯誤消息更加明確。它說「InteractivelyDefined」至少給出了一個提示,即你正在編輯的功能是交互式定義的,因此不能直接編輯。
當然,解決方法是將函數定義源代碼手動複製粘貼到Canopy編輯器中(它會自動從剪貼板中去除ipython提示,這使得這非常簡單),編輯函數,並運行該文件。
當我執行你說的命令,'%編輯printval' 我得到以下信息,這意味着它在命名空間 可用'類型:功能 字符串形式: 文件<在0x00000000050195F8功能printval>: c:\ users \ tester \ 定義:printval() Docstring:'我認爲這與Enthought Canopy的設置有關 –
我打開了Canopy Command Prompt並輸入'ipython'並定義了下面的函數'def printval():print'hello''。當我使用下面的命令'%edit printval'時,我得到以下錯誤信息:'editing ...命令的語法不正確。警告:無法打開編輯器。 Ipython版本爲0.13.1,Python版本爲2.7.3 –
「Ipython版本爲0.13.1,Python版本爲2.7.3」如果這實際上是Canopy命令提示符,那麼它是一個非常(> 3年) Canopy版本,或者被另一個非常老的Python安裝阻止。要將Canopy更新到最新版本,請參閱[本文](https://support.enthought.com/entries/61798124-Canopy-shows-no-updates-available-reinstalling-from-the-website)。 –