返回介绍

导入和作用域

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

正如我们所学过的,不导入一个文件,就无法存取该文件内所定义的变量名。也就是说,你不可能自动看见另一个文件内的变量名,无论程序中的导入结构或函数调用的结构是什么情况。变量的含义一定是由源代码中的赋值语句的位置决定的,而属性总是伴随着对对象的请求。

例如,考虑以下两个简单模块。第一个模块moda.py只在其文件中定义一个全局变量X,以及一个可修改全局变量X的函数。

第二个模块modb.py定义自己的全局变量X,导入并调用了第一个模块的函数。

执行时,moda.f修改moda中的X,而不是modb中的X。moda.f的全局作用域一定是其所在的文件,无论这个函数是由哪个文件调用的:

换句话说,导入操作不会赋予被导入文件中的代码对上层代码的可见度:被导入文件无法看见进行导入的文件内的变量名。更确切的说法是:

·函数绝对无法看见其他函数内的变量名,除非它们从物理上处于这个函数内。

·模块程序代码绝对无法看见其他模块内的变量名,除非明确地进行了导入。

这类行为是语法作用域范畴的一部分:在Python中,一段程序的作用域完全由程序所处的文件中实际位置决定。作用域绝不会被函数调用或模块导入影响[1]

[1]有些语言的行为不同,提供所谓的动态作用域,也就是作用域其实依赖于运行期间的调用。然而,这样会让程序代码变得很难处理,因为变量的含义会随时间而发生变化。

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

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

发布评论

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