2024-09-30 03:24:55 发布
网友
我非常喜欢Smalltalk中的增量编程。你有一个正在运行的程序,当你充实你的程序时,你会添加它。您可以更改方法并使用应用的更改重新启动堆栈,以查看新版本的功能。当您的程序正在运行时,您可以检查本地状态并更改它们。在
在Python中有类似的功能吗?我看到过类似功能的提示,比如reload(),但是我对Python的了解还不足以理解它是如何使用的。我看过一些Python初学者的书,但没有看到任何关于这方面的内容。在
不管对Python做什么努力,有些事情都是不可能的。例如,在开发web应用程序时,Flask/Django/Gunicorn或whatnot web服务器在源代码发生更改后必须重新启动其进程。但是在比如Lisp中,您在REPL中启动一个web服务器,然后您只需编译一个函数,例如添加一个新的路由,您就可以立即尝试它。没有进程重新启动,它更具交互性。在
另一个例子是更新类和实例。在公共Lisp中,假设您编写了一个类并创建了一些对象。现在您更改了类定义,并且现有实例得到(延迟)更新。例如,添加一个新的槽,删除一个槽,等等,我们甚至可以控制更新是如何完成的(通过子类化一些通用函数)。在
在Python中附加到一个正在运行的远程进程是可行的,但是交互性要少得多,编辑体验也不太理想(默认情况下,终端中是一个哑pythonshell,而完全成熟的Emacs则可以在一次击键(Slime中的C-c C-c)中导航源代码和重新编译函数(或者在任何其他可以连接到Swank服务器)。在
C-c C-c
运行一个给定的单元测试也很简单和快速,不需要重新启动任何进程。在
参考文献:
您可以动态更改函数定义。在
例如,你有一个函数mymodule.myfunc(x,y),你想看看long_process()是如何调用它的。在
mymodule.myfunc(x,y)
long_process()
你可以(在REPL>>>提示符或笔记本中)
>>>
myfunc_orig = mymodule.myfunc def myfunc_new(x,y): print("myfunc_new",x,y) return myfunc_orig(x,y) mymodule.myfunc = myfunc_new long_process()
现在每次调用mymodule.myfunc时都会得到一个打印输出。在
mymodule.myfunc
完成后,用
我在交互模式下使用ipython,或者在编程项目完成之前让终端保持打开状态,或者您可以通过dill保存会话(在ipython控制台do:!pip install dill)。在
!pip install dill
使用dill包保存会话
要保存所有全局变量和定义,请执行以下操作:
import dill dill.dump_session('.session.pkl')
在新会话中可以通过以下方式加载:
它取自here
不管对Python做什么努力,有些事情都是不可能的。例如,在开发web应用程序时,Flask/Django/Gunicorn或whatnot web服务器在源代码发生更改后必须重新启动其进程。但是在比如Lisp中,您在REPL中启动一个web服务器,然后您只需编译一个函数,例如添加一个新的路由,您就可以立即尝试它。没有进程重新启动,它更具交互性。在
另一个例子是更新类和实例。在公共Lisp中,假设您编写了一个类并创建了一些对象。现在您更改了类定义,并且现有实例得到(延迟)更新。例如,添加一个新的槽,删除一个槽,等等,我们甚至可以控制更新是如何完成的(通过子类化一些通用函数)。在
在Python中附加到一个正在运行的远程进程是可行的,但是交互性要少得多,编辑体验也不太理想(默认情况下,终端中是一个哑pythonshell,而完全成熟的Emacs则可以在一次击键(Slime中的
C-c C-c
)中导航源代码和重新编译函数(或者在任何其他可以连接到Swank服务器)。在运行一个给定的单元测试也很简单和快速,不需要重新启动任何进程。在
参考文献:
您可以动态更改函数定义。在
例如,你有一个函数
mymodule.myfunc(x,y)
,你想看看long_process()
是如何调用它的。在你可以(在REPL
>>>
提示符或笔记本中)现在每次调用
mymodule.myfunc
时都会得到一个打印输出。在完成后,用
^{pr2}$我在交互模式下使用ipython,或者在编程项目完成之前让终端保持打开状态,或者您可以通过dill保存会话(在ipython控制台do:
!pip install dill
)。在使用dill包保存会话
要保存所有全局变量和定义,请执行以下操作:
在新会话中可以通过以下方式加载:
^{pr2}$它取自here
相关问题 更多 >
编程相关推荐