2010-11-04 88 views
2

如何將您在Python交互式會話中編寫的函數/類保存到文件中?具體來說,pydev/eclipse的交互式會話(在Mac上)有沒有辦法做到這一點?如何保存/複製我在Python解釋器中編寫的類和函數?

我剛開始學習python,並且很享受使用解釋器的交互式會話來測試和玩我寫的模塊。但是,我發現自己在解釋器中編寫函數,我認爲,將它保存到我的腳本文件中會很酷。我該怎麼做呢?

我想:

import pickle 
pickle.dump(my_function, open("output.p", "w")) 

但似乎更多的是二進制序列化的,或者至少沒有什麼我可以複製並粘貼到我的代碼...

是否有辦法看到我在解釋器中定義的類&函數後面的代碼?然後將它們從解釋器中複製出來?

更新:

好吧,這裏是我到目前爲止已經瞭解到:

  • 我錯過了最簡單的是 - 的PyDev在Eclipse中交互式會話,您可以右鍵單擊並保存會話。仍然必須刪除>>>的,但完成工作。
  • IPython顯然是這樣做的方式。
  • How to save a Python interactive session?有更多細節。
+0

@ S.Lott - 我從[python for java程序員](http://python.computersci.org/Main/TableOfContents)和[django book](http://www.djangobook.com/en /2.0 /)...然後玩很酷的模塊:) – 2010-11-04 02:49:34

+0

@亞當:你說這些書都沒有提到「腳本文件」的想法?這部分不是線索? http://python.computersci.org/Introduction/ProgramExecution – 2010-11-04 03:00:42

+0

@ S.Lott:我很好地編寫模塊然後運行它們......當我在解釋器中弄清楚事情並在那裏編寫函數時。我的問題似乎類似於[如何保存交互式會話](http://stackoverflow.com/questions/947810/how-to-save-a-python-interactive-session) - 也許我仍然抓住正確的術語。 – 2010-11-04 04:05:36

回答

5

交互式會話編碼最好的環境必須是IPython,在我看來。它建立在並擴展了基本的Python解釋器,並帶有許多魔力,包括歷史。例如,您可以發出命令%logstart將所有後續輸入轉儲到文件中,之後仍然需要對其進行編輯,然後再將其作爲腳本進行編輯,但會爲您提供很多幫助。

安裝IPython時,不要忘記pyreadline

但是,通常情況下,最好在IDE中編寫代碼然後運行它。 IPython也可以在這裏幫助。如果您編寫並保存腳本,然後使用IPython「run」命令來運行腳本,腳本的整個全局名稱空間將可用於IPython會話中的檢查。此外,您可以使用-d參數運行,以便在任何未處理的異常情況下立即觸發pdb調試器。

如果你更喜歡直接的IDE和調試器,那麼最簡單和最好的輕量級環境必須是PyScripter

2

我認爲答案是改變你的工作流程。

我所做的是在編輯器(emacs)中編寫我的函數,然後按組合鍵(Ctrl-c Ctrl-e)將文本區域發送給(i)python解釋器。

這樣我可以保存功能,如果我想,也可以在解釋器中玩。 Emacs是我如何做的核心,但我確定必須有許多編輯器(vim,gedit等)和IDEs的類似方法。

PS。使用Python時,尋找一個好的編輯器是至關重要的。編輯器必須能夠輕鬆地將代碼塊左右移動,否則空白問題變得過於繁重。

我不喜歡在python解釋器中輸入代碼塊,因爲它不允許我輕鬆地移動塊。當你找到合適的編輯器時,你會更喜歡Python。

+0

這可能是最好的解決方法 - 我是一個日食癮君子,pydev很棒,能夠在我的代碼下方打開解釋器。 – 2010-11-04 02:03:16

0

我認爲這是做不到的。

Python可以使用inspect模塊執行自我檢查,但inspect.getsource函數在沒有源文件的情況下無法運行。

+0

inspect.getsource很酷...感謝鏈接到檢查功能...可能會派上用場:) – 2010-11-04 02:13:28

2

你可以設置一個python歷史文件,它存儲你輸入到解釋器中的所有東西。

方法如下:

http://docs.python.org/tutorial/interactive.html

+0

感謝 - 這項工程...雖然輸出已經逃脫空間。我發現[http://stackoverflow.com/questions/947810/how-to-save-a-python-interactive-session]帶有[ipython]的鏈接(http://ipython.scipy.org/moin/) ...所以這可能是要走的路,但不幸的是,它看起來不像eclipse的pydev交互會話。謝謝! – 2010-11-04 04:08:25