【Python入门速学】3.3. 命名空间(namespace)

张开发
2026/4/13 21:34:14 15 分钟阅读

分享文章

【Python入门速学】3.3. 命名空间(namespace)
3.3.1. 什么是命名空间命名空间是程序中变量名的集合它们仅在特定的代码区域内存在而不会影响整个程序。变量的作用域scope指的是变量在程序中可访问的范围。如果变量在某个位置不存在则它超出了作用域。你可以把命名空间想象成程序中的“空间”其中存放着变量名。3.3.2. 命名空间的作用不同的命名空间可以包含相同的变量名但在不同的上下文中它们的值可以不同。例如全局命名空间存储程序顶层的变量。局部命名空间存储函数内部的变量。3.3.3. 全局命名空间Global Namespace全局命名空间存储所有的全局变量即在整个程序范围内可用的变量。示例# 全局命名空间global_var10other_var20此时global_var和other_var都存储在全局命名空间中。3.3.4. 局部命名空间Local Namespace函数内部的变量属于局部命名空间它们仅在函数执行期间存在。defmy_function(x):yx1# 局部变量returny在my_function(4)调用时x 4y x 1 5但y仅在my_function内部有效。3.3.5. 作用域的查找顺序LEGB 规则当 Python 查找变量时它会按以下顺序查找局部作用域Local当前函数内部的变量。封闭作用域Enclosing外层函数的变量适用于嵌套函数。全局作用域Global模块级变量。内建作用域Built-inPython 内置变量如print。示例global_var10# 全局变量defmy_function():local_var5# 局部变量print(global_varlocal_var)local_var仅在my_function内部有效。global_var在整个程序中可用。3.3.6. 变量的查找过程如果一个变量在当前作用域不存在Python 会向上查找直到找到该变量。global_var10defmy_function():yglobal_var1# 查找 global_varprint(y)my_function()# 输出 11Python 发现global_var不在函数内于是向上查找找到了全局变量global_var。3.3.7. 局部变量不会影响全局变量如果在函数内部定义了与全局变量同名的变量它们是不同的变量。global_var10defmy_function():global_var5# 这是局部变量不影响全局变量print(Inside function:,global_var)my_function()print(Outside function:,global_var)输出Inside function: 5 Outside function: 103.3.8. 修改全局变量global 关键字如果你想在函数内部修改全局变量需要使用global关键字。global_var10defmy_function():globalglobal_var# 允许修改全局变量global_var5my_function()print(global_var)# 输出 53.3.9. 嵌套作用域nonlocal 关键字在嵌套函数中如果想修改外部函数的变量可以使用nonlocal关键字。defouter():x10# 外部函数变量definner():nonlocalx# 修改外部函数变量x5print(Inside inner:,x)inner()print(Inside outer:,x)outer()输出Inside inner: 15 Inside outer: 153.3.10 总结命名空间存储变量名它们有不同的作用域。全局命名空间包含所有全局变量局部命名空间包含函数内部的变量。Python 按 LEGB 规则查找变量先查找局部变量再逐级向上查找。局部变量不会影响全局变量除非使用global关键字。嵌套函数可使用nonlocal关键字修改外部函数的变量。

更多文章