python命名空间和作用域

命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的

命名空间查找顺序:本地命名空间、全局命名空间、内置命名空间

[En]

Namespace lookup order: local namespace, global namespace, built-in namespace

多个命名空间中可以存在相同的对象名称

[En]

The same object name can exist in multiple namespaces

作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。python的作用域共有四种:

L(Local):最内层,包含局部变量,比如一个函数/方法内部

E(Enclosing):包含了非局部也非全局的变量。比如两个嵌套函数中间的变量

G(Global):当前脚本的最外层,比如当前模块的全局变量

B(Built-in):包含了内建的变量/关键字等,最后被搜索(通过builtins标准模块实现,要先导入)

规则顺序:L、E、G、B

python中只有模块、类、函数才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)不会引入新的作用域,这些语句内定义的变量,外部也可以访问

例如:

结果会报错:

例如:

结果不会报错:

全局变量和局部变量

在函数内部定义的变量具有局部作用域,而在函数外部定义的变量具有全局作用域

[En]

Variables defined inside the function have a local scope, and those defined outside the function have a global scope

局部变量只能在声明它们的函数中访问,而全局变量可以在整个程序中访问。

[En]

Local variables can only be accessed within the function in which they are declared, while global variables can be accessed throughout the program.

如果想在局部作用域想修改全局作用域的变量,要使用global关键字:

结果为:

您还可以通过函数参数传递它:

[En]

You can also pass it through function arguments:

结果为:

如果想修改嵌套作用域的变量需要使用nonlocal关键字

Original: https://www.cnblogs.com/daxiangcai/p/16183896.html
Author: 大湘菜
Title: python命名空间和作用域

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499788/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球