返回介绍

使用exec运行模块文件

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

实际上,除了这里介绍的,还有更多的方法可以运行模块文件中保存的代码。例如,exec(open('module.py').read())内置函数调用,是从交互提示模式启动文件而不必导入以及随后的重载的一种方法。每次exec都运行文件的最新版本,而不需要随后的重载(script1.py保留我们在前面小节中一次重载它之后的样子):

...change script1.py in a text edit window...

exec调用有着类似于import的效果,但是,它从技术上不会导入模块,默认情况下,每次以这种方式调用exec的时候,它都重新运行文件,就好像我们把文件粘贴到了调用exec的地方。因此,exec不需要在文件修改后进行模块重载,它忽略了常规的模块导入逻辑。

缺点是,由于exec的工作机制就好像在调用它的地方粘贴了代码一样,和前面提到的from一样,对于当前正在使用的变量有潜在的默认覆盖的可能。例如,我们的script1.py赋给了一个名为x的变量。如果这个名字已经在exce调用的地方使用了,那么这个名称的值将被覆盖。

相反,基本的import语句每个进程只运行文件一次,并且它会把文件生成到一个单独的模块名称空间中,以便它的赋值不会改变你的作用域中的变量。为模块名称空间分隔所付出的代价是,在修改之后需要重载。

注意:版本差异提示:除了允许exec(open('module.py'))的形式,Python 2.6也包含一个execfile('module.py')内置函数,这两个函数都会自动读取文件的内容。这两种形式都等同于exec(open('module.py').read())的形式,后者更为复杂,但是在Python 2.6和Python 3.0中都可以运行。

遗憾的是,两种较简单的Python 2.6的形式,在Python 3.0中都不可用,这意味着我们必须理解文件及其读取方法,以便今天完全理解这一技术(唉,这似乎是针对Python 3.0的实用性的美学痛击)。实际上,Python 3.0中的exec形式需要如此多的录入,以至于最佳建议都是干脆不要使用它,通常启动文件的最好方式是输入系统shell命令行或者使用下一节所介绍的IDLE菜单选项。要了解关于Python 3.0的exec形式的更多内容,请参阅第9章。

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

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

发布评论

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