global和nonlocal关键字的使用
- 作用域
- global关键字的使用
- nonlocal关键字的使用
作用域
在Python中变量的作用域由其代码块决定,在代码块中定义的的变量和函数属于局部作用域;在函数中定义的变量和函数属于函数作用域;在模块中定义的变量和函数属于全局作用域。将这几个作用域可以细分为以下几种:
全局作用域指在程序的最外层定义的变量和函数,他们可以在程序的任何地方被访问。
函数作用域是指在函数内部定义的变量和函数,他们只能在函数的内部被访问,一旦函数被调用结束后,函数作用域中的变量和函数就会被销毁。因为函数存储在栈空间,函数被调用时,通过栈空间分配内存,一旦函数调用结束,在栈空间分配给函数的内存就会被回收,从而导致作用域被销毁。
嵌套作用域是指在函数内部定义的函数,他们可以访问函数作用域中的变量和函数,但不能访问全局作用域中的变量和函数。
代码块作用域指的是在代码块中定义的变量和函数,如:for循环、while循环、if语句等,他们只能够在代码块内部进行访问。当代码块执行完成后,局部作用域中的变量和函数就会被销毁,跟函数作用域有点相似。
总的来说这里的作用域就分为全局和局部两个作用域,函数作用域、代码块作用域这些都属于局部作用域,而嵌套作用域属于特殊作用域。
下面用代码进行说明:
a = 3
def a1():
b = 2
def b1():
print("我是嵌套作用域")
b1()
a1()
for i in range(3):
c1 = i
print("我是在代码块中的局部变量")
global关键字的使用
上面我们已经对作用域有了简单的了解,在Python中,函数可以访问全局作用域中的变量,但是不能修改他们的值。如果需要修改他们的值需要使用global关键字声明变量为全局变量。代码如下:
b = 3
def a1():
global b
b += 2
print(f"使用全局变量中的{b}")
a1()
print(b)
nonlocal关键字的使用
如果在函数内部需要修改外部函数中定义的变量,而且该变量既不是全局变量也不是局部变量,那么就可以使用nonlocal关键字来声明该变量。
nonlocal关键字可以用来访问外部函数中的变量,并且修改它的值。nonlocal关键字是用于嵌套函数中定义的变量。它的作用域范围是从当前函数开始到其父函数结束。代码如下:
def outer():
x = 1
def inner():
nonlocal x
x += 1
print(x)
inner()
outer()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)