返回介绍

作用域和嵌套函数

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

到现在为止,忽略了Python的作用域法则中的一部分(是有意而为的,因为它在实际情景中很少见到)。但是,现在到了深入学习一下LEGB查找法则中E这个字母的时候了。E这一层是新内容(是Python 2.2才增加的),它包括了任意嵌套函数内部的本地作用域。嵌套作用域有时也叫做静态嵌套作用域。实际上,嵌套是一个语法上嵌套的作用域,它是对应于程序源代码的物理结构上的嵌套结构。

嵌套作用域的细节

在增加了嵌套的函数作用域后,变量的查找法则变得稍微复杂了一些。对于一个函数:

·一个引用(X)首先在本地(函数内)作用域查找变量名X;之后会在代码的语法上嵌套了的函数中的本地作用域,从内到外查找;之后查找当前的全局作用域(模块文件);最后再内置作用域内(模块__builtin__)。全局声明将会直接从全局(模块文件)作用域进行搜索。

·在默认情况下,一个赋值(X=value)创建或改变了变量名X的当前作用域。如果X在函数内部声明为全局变量,它将会创建或改变变量名X为整个模块的作用域。另一方面,如果X在函数内声明为nonlocal,赋值会修改最近的嵌套函数的本地作用域中的名称X。

注意:全局声明将会将变量映射至整个模块。当嵌套函数存在时,嵌套函数中的变量也许仅仅是引用,但它们需要nonlocal声明才能修改。

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

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

发布评论

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