2010-11-04 42 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