我非常喜欢在 Smalltalk 中可以进行的增量编程。你有一个正在运行的程序,当你充实你的程序时,你可以添加它。您可以更改方法并在应用更改后重新启动堆栈以查看新版本的功能。当您的程序正在运行时,您可以检查本地状态并更改它们。
在 Python 中有类似的东西吗?我已经看到了这种能力的暗示,例如 reload(),但我对 Python 的了解还不够,无法准确理解它的使用方式。我浏览了一些初学者 Python 书籍,但没有看到任何提及。
最佳答案
有些事情无论在 Python 上付出怎样的努力都是不可能的。例如,在开发 Web 应用程序时,Flask/Django/Gunicorn 或诸如此类的 Web 服务器必须在更改源后重新启动其进程。但是在 Lisp 中,你在 REPL 中启动了一个 Web 服务器,你只需编译一个函数,例如添加一个新路由,你就可以立即尝试。没有重新启动进程,它更具交互性。
另一个例子是更新类和实例。在 Common Lisp 中,假设您编写了一个类并创建了一些对象。现在您更改了类定义,并且现有实例得到(延迟)更新。例如,添加一个新插槽,删除一个插槽等。我们甚至可以控制更新的完成方式(通过子类化一些通用函数)。
在 Python 中附加到一个正在运行的远程进程是可行的,但交互性要差得多,编辑体验也不太理想(默认情况下终端中的一个愚蠢的 python shell VS 一个完整的 Emacs,你可以在其中导航一次击键(C-c C-c
在 Slime 中)(或在任何其他可以连接到 Swank 服务器的编辑器中)获取和重新编译函数。
运行一个给定的单元测试也很直接和快速,没有重新启动的过程。
引用资料:
关于python - 是否有可能在 Python 中使用与 Smalltalk(例如 Pharo)或 Common Lisp 中类似的工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53839202/