返回介绍

reload、from 以及交互模式测试

发布于 2024-01-29 22:24:15 字数 1073 浏览 0 评论 0 收藏 0

第3章曾经提到过,通常情况下,最好不要通过导入或重载来启动程序,因为其中牵涉到了许多复杂的问题。当引入from之后,事情就变得更糟了。Python初学者常常会遇到这里所提到的陷阱。在文本编辑窗口开启一个模块文件后,假设你启动一个交互模式会话,通过from加载并测试模块:

发现了一个bug,跳回编辑窗口,做了修改,并试着重载模块:

但是这样行不通:from语句赋值的是变量名function,而不是module。要在reload中引用模块,得先通过import至少将其加载一次:

然而,这样也无法运行:reload更新了模块对象,但是就像上一节的讨论,像function这样的变量名之前从模块复制出来,依然引用了旧的对象(在这个例子中,就是function的原始版本)。要确实获得新的function,必须在reload之后调用module.function,或者重新执行from:

现在,新版本的function终于可以执行了。

正如见到的那样,使用reload和from有些本质上的问题:不但得记住导入后要重载,还得记住在重载后重新执行from语句。即使是专家,其复杂度也让人够头疼(实际上,这种情形在Python 3.0中甚至变得更糟糕,因为你必须也记住导入reload本身)。

不应该对reload和from能完美地合作抱有幻想。最佳的原则就是不要将它们结合起来使用:使用reload和import,或者以其他方式启动程序,如第3章的建议(例如,使用IDLE中的"Run"/"Run Module"菜单选项、点击文件图标或者系统命令行)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文