> 文章列表 > Python入门到精通13天(global和nonlocal关键字的使用)

Python入门到精通13天(global和nonlocal关键字的使用)

Python入门到精通13天(global和nonlocal关键字的使用)

global和nonlocal关键字的使用

  • 作用
  • global关键字的使用
  • nonlocal关键字的使用

作用域

在Python中变量的作用域由其代码块决定,在代码块中定义的的变量和函数属于局部作用域;在函数中定义的变量和函数属于函数作用域;在模块中定义的变量和函数属于全局作用域。将这几个作用域可以细分为以下几种:

  • 全局作用域

全局作用域指在程序的最外层定义的变量和函数,他们可以在程序的任何地方被访问。

  • 函数作用域

函数作用域是指在函数内部定义的变量和函数,他们只能在函数的内部被访问,一旦函数被调用结束后,函数作用域中的变量和函数就会被销毁。因为函数存储在栈空间,函数被调用时,通过栈空间分配内存,一旦函数调用结束,在栈空间分配给函数的内存就会被回收,从而导致作用域被销毁。

  • 嵌套作用域

嵌套作用域是指在函数内部定义的函数,他们可以访问函数作用域中的变量和函数,但不能访问全局作用域中的变量和函数。

  • 代码块作用域

代码块作用域指的是在代码块中定义的变量和函数,如:for循环、while循环、if语句等,他们只能够在代码块内部进行访问。当代码块执行完成后,局部作用域中的变量和函数就会被销毁,跟函数作用域有点相似。

总的来说这里的作用域就分为全局和局部两个作用域,函数作用域、代码块作用域这些都属于局部作用域,而嵌套作用域属于特殊作用域。

下面用代码进行说明:

# 全局作用域
a = 3def a1():# 函数作用域b = 2def b1():print("我是嵌套作用域")b1()a1()# 局部作用域
for i in range(3):c1 = iprint("我是在代码块中的局部变量")

global关键字的使用

上面我们已经对作用域有了简单的了解,在Python中,函数可以访问全局作用域中的变量,但是不能修改他们的值。如果需要修改他们的值需要使用global关键字声明变量为全局变量。代码如下:

b = 3def a1():# 声明一下全局变量global b# 这里进行值的修改# 如果不进行全局变量的声明,这里修改则会报错b += 2print(f"使用全局变量中的{b}")a1()print(b) # 输出为 5

nonlocal关键字的使用

如果在函数内部需要修改外部函数中定义的变量,而且该变量既不是全局变量也不是局部变量,那么就可以使用nonlocal关键字来声明该变量。

nonlocal关键字可以用来访问外部函数中的变量,并且修改它的值。nonlocal关键字是用于嵌套函数中定义的变量。它的作用域范围是从当前函数开始到其父函数结束。代码如下:

def outer():x = 1def inner():# 这里声明变量可以用来访问外部函数的变量nonlocal x# 声明了之后可以进行修改值x += 1print(x)inner()outer()  # 输出结果为2