如何保存/复制我在Python解释器中编写的类和函数?

2 投票
4 回答
600 浏览
提问于 2025-04-16 06:32

如何将你在Python交互式会话中写的函数或类保存到文件里呢?特别是在Mac上使用PyDev/Eclipse的交互式会话时,有没有什么方法可以做到这一点?

我刚开始学习Python,觉得用解释器的交互式会话来测试和玩我写的模块非常有趣。不过,我发现自己在解释器里写的函数,心里想着,哦,能把这些保存到我的脚本文件里就好了。我该怎么做呢?

我试过:

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

但这似乎更像是二进制序列化,或者说是我无法直接复制粘贴到我的代码里的东西……

有没有办法查看我在解释器中定义的类和函数的代码?然后把它们从解释器中复制出来呢?

更新:

好的,这是我到目前为止学到的:

  • 我错过了最简单的方法——在Eclipse的PyDev交互式会话中,你可以右键点击并保存你的会话。虽然还得去掉前面的>>>,但总算能完成任务。
  • IPython显然是实现这个功能的好选择。
  • 如何保存Python交互式会话?里有更多细节。

4 个回答

2

你可以设置一个 Python 历史记录文件,这个文件会保存你在解释器中输入的所有内容。

具体步骤如下:

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

2

我觉得解决办法是改变你的工作方式。

我通常是在一个编辑器(比如emacs)里写我的函数,然后按一个组合键(Ctrl-c Ctrl-e)把选中的文本发送到(i)python解释器里。

这样的话,我可以选择保存这个函数,也可以在解释器里试着运行它。

Emacs在我的工作流程中非常重要,但我相信其他很多编辑器(比如vim、gedit等)和集成开发环境(IDE)也有类似的方法。

顺便说一下,找到一个好的编辑器对使用Python来说非常重要。这个编辑器必须能轻松地左右移动代码块,否则处理空格的问题会变得很麻烦。

我不喜欢在python解释器里输入代码块,因为那样不方便移动代码块。当你找到合适的编辑器时,你会更喜欢Python。

5

在我看来,最适合互动编码的环境就是IPython。它是在基本的Python解释器基础上开发的,增加了很多实用的功能,比如可以记录历史命令。例如,你可以输入命令 %logstart,这样之后你输入的所有内容都会被保存到一个文件里,虽然这个文件还需要后续编辑才能变成一个完整的脚本,但这给你提供了很多可以使用的内容。

安装IPython的时候,别忘了安装pyreadline

不过一般来说,最好还是在一个集成开发环境(IDE)里写代码,然后再运行。IPython在这方面也很有帮助。如果你写好并保存了脚本,然后用IPython的“run”命令来运行它,脚本的全局命名空间就可以在你的IPython会话中查看。此外,你还可以使用 -d 参数来立即启动调试器(pdb),这样在遇到未处理的异常时就能立刻调试。

如果你更喜欢传统的IDE和调试器,那么最简单、最轻量的环境就是PyScripter

撰写回答