Python命名空间与作用域深入全面详解攻略
Python是一门解释型语言,在执行代码时需要进行解释。在语言中,每一个对象都有一个命名空间。而在程序代码中,每一个名字都属于对应的命名空间。Python中的变量作用域遵循LEGB规则,即从局部作用域开始寻找变量,一直找到全局作用域,如果还未找到,就会报错。
Python命名空间详解
命名空间是Python中的一个虚拟容器,用于存储变量和函数等对象。它们在代码中以字典的方式实现。Python中存在三种命名空间:
- 内置命名空间:系统内置的名称在这里被存放。比如,我们使用的
print()
函数,就是内置命名空间中的对象。 - 全局命名空间:模块文件所在的命名空间称为全局命名空间。
- 局部命名空间:函数调用时,随函数调用而产生的命名空间称为局部命名空间。
当Python查找某个对象时,会从当前作用域开始,然后由内向外依次在不同的命名空间中查找。如果某个名称没有在当前命名空间中找到,就会去上一级命名空间查找,直到最终抵达内置命名空间。
Python作用域详解
Python中的作用域分为四种:
- L (Local):局部变量作用域,仅在函数内部使用。
- E (Enclosing):闭包变量作用域,当一个函数存在嵌套关系时,在其中一个函数内部嵌套的函数中使用的变量,称为闭包变量,其作用范围为该闭包内部及其外部函数内部。
- G (Global):全局变量作用域,可在模块内任何位置使用。
- B (Built-in):内置变量作用域,Python内置的函数和变量名拥有该作用域。
在LEGB规则中,从L开始寻找,如果找不到,就向E寻找;如果E中仍然找不到,则向G中寻找;最后,如果都找不到,则进入B寻找。
示例
a = 10 # a属于全局命名空间
def func1():
b = 20 # b属于局部命名空间
def func2():
c = 30 # c属于内嵌函数中的局部命名空间
print(a, b, c)
func2()
func1() # 结果为10, 20, 30
在这个示例中,我们定义了一个全局变量a
,值为10
,并在func1()
中定义了变量b
,值为20
。在func2()
的内嵌内部定义了变量c
,值为30
。在func2()
中,我们打印了a
,b
,和c
的值,最终结果为10
,20
,30
。
a = 10 # a属于全局命名空间
def func1():
a = 20
print(a)
func1() # 结果为20
print(a) # 结果为10
在这个示例中,我们定义了全局变量a
,值为10
。在func1()
中我们定义了变量a
,值为20
。在func1()
中我们打印了变量a
,结果为20
。在全局范围内我们打印变量a
,结果为10
。
以上就是Python命名空间与作用域的详细介绍及两个示例说明。如果我们对Python命名空间和作用域有进一步的理解,就能更好地开发Python程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python命名空间与作用域深入全面详解 - Python技术站