唠唠python的作用域,看看每个变量都为自己打下了多少江山

1. 变量作用域

在Python中,每个变量都有其所属的作用域。作用域指的是程序中可以访问该变量的区域。

Python中有以下几种作用域:

局部作用域

全局作用域

内建作用域

1.1 局部作用域

局部作用域即变量在函数内部定义的情况。

def foo():

a = 10

print(a)

foo()

在上述代码中,变量a的作用域仅限于函数foo内部,函数外部无法访问该变量。

1.2 全局作用域

全局作用域即变量在函数外部定义的情况。

a = 10

def foo():

print(a)

foo()

在上述代码中,变量a的作用域是全局的,即可在函数内部访问该变量。

1.3 内建作用域

内建作用域指的是Python内建函数和模块的作用域。

print(abs(-10))

在上述代码中,abs函数属于内建函数,在任何地方都可以调用该函数。

2. 变量的命名空间

命名空间指的是一个对象在Python中被赋予的名字所存储的位置。在Python中,每个命名空间都是一个字典对象。

Python中有以下几种命名空间:

内建命名空间

全局命名空间

局部命名空间

2.1 内建命名空间

内建命名空间指的是Python内建函数和模块的命名空间。

print(abs.__name__)

在上述代码中,abs函数属于内建函数,它的命名空间是内建命名空间。

2.2 全局命名空间

全局命名空间指的是在全局作用域中定义的命名空间。

a = 10

print(globals()['a'])

在上述代码中,变量a属于全局命名空间,它可以通过globals()函数访问。

2.3 局部命名空间

局部命名空间指的是在函数内部定义的命名空间。

def foo():

b = 20

print(locals()['b'])

foo()

在上述代码中,变量b属于局部命名空间,它可以通过locals()函数访问。

3. global关键字

在Python中,如果想在函数内部访问全局变量,可以使用global关键字。

a = 10

def foo():

global a

a = 20

foo()

print(a)

在上述代码中,使用global关键字在函数内部将变量a声明为全局变量,并修改了全局变量a的值。

4. nonlocal关键字

在Python中,如果想在嵌套函数内部访问外部函数的局部变量,可以使用nonlocal关键字。

def outer():

a = 10

def inner():

nonlocal a

a = 20

inner()

print(a)

outer()

在上述代码中,使用nonlocal关键字在inner函数内部将变量a声明为外部函数outer的局部变量,并修改了outer函数局部变量a的值。

5. 总结

Python的作用域和命名空间非常重要,正确地理解和使用作用域和命名空间可以避免很多错误和问题。

后端开发标签