Python中如何正确使用global和nonlocal关键字?

2026-05-16 15:391阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计683个文字,预计阅读时间需要3分钟。

Python中如何正确使用global和nonlocal关键字?

1. global的作用global的作用是将变量声明为全局变量,使其在整个程序中都可以访问。这个问题在面试中很常见,面试官可能会问,如下代码的打印结果是什么?pythonvar=10def func(): var=var + 20 print(inner:, var)print(var)输出结果为:`10`。

1、global的作用

global的作用就是将变量声明为全局变量

这个问题在面试中非常常见,经常会有面试官问,如下代码打印结果是啥

var=10
def func():
var=var+20
print("inner:",var)

print(var)
func()
print(var)

分析:其实这段代码真正执行的时候是会报错的,提示在第三行的位置var未定义,这是因为第一行定义的var为全局变量,而在第三行中=右侧的var为局部变量,此变量在函数局部内确实未定义,这就是这段代码报错的原因,解决这个问题的方法就是在第三行代码之前,用global关键将var声明为全局变量
如下:

var=10
def func():
global var
var=var+20
print("inner:",var)

print(var)
func()
print(var)

执行结果如下:

10
inner: 30
30

这里需要记住的一个关键点是,全局变量在函数局部区域内,不能出现在赋值符号=的右侧,但是如果没有赋值符号,比如直接打印,这时又是可见的,如下:

var=10
def func():
print("inner:",var)
print(var)
func()
print(var)

执行结果为:

10
inner: 10
10

如果在函数局部区域内对和全局变量同名的变量重新赋值时,注意此时赋值的并不是全局变量,而是一个全新的局部变量,而全局变量并未发生变化,如下:

var=10
def func():
var=20
print("inner:",var)

print(var)
func()
print(var)

此时执行结果为:

10
inner: 20
10

2、nonlocal的作用

  • nonlocal的作用是声明既不是全局变量,也不是局部变量
  • 如下代码,虽然使用global声明var,但是代码还是报错的,这是因为这里的var变量并不是全局变量,同时在最内层函数中也不是局部变量,在这种情况下就需要nonlocal关键字类声明
def outer():
var=10
def inner():
global var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)

outer()

如下代码:使用nonlocal声明之后,就可以正常执行了,这就是nonlocal关键字的作用

def outer():
var=10
def inner():
nonlocal var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)

outer()

执行结果如下:

10

in inner: 30

30


Python中如何正确使用global和nonlocal关键字?

本文共计683个文字,预计阅读时间需要3分钟。

Python中如何正确使用global和nonlocal关键字?

1. global的作用global的作用是将变量声明为全局变量,使其在整个程序中都可以访问。这个问题在面试中很常见,面试官可能会问,如下代码的打印结果是什么?pythonvar=10def func(): var=var + 20 print(inner:, var)print(var)输出结果为:`10`。

1、global的作用

global的作用就是将变量声明为全局变量

这个问题在面试中非常常见,经常会有面试官问,如下代码打印结果是啥

var=10
def func():
var=var+20
print("inner:",var)

print(var)
func()
print(var)

分析:其实这段代码真正执行的时候是会报错的,提示在第三行的位置var未定义,这是因为第一行定义的var为全局变量,而在第三行中=右侧的var为局部变量,此变量在函数局部内确实未定义,这就是这段代码报错的原因,解决这个问题的方法就是在第三行代码之前,用global关键将var声明为全局变量
如下:

var=10
def func():
global var
var=var+20
print("inner:",var)

print(var)
func()
print(var)

执行结果如下:

10
inner: 30
30

这里需要记住的一个关键点是,全局变量在函数局部区域内,不能出现在赋值符号=的右侧,但是如果没有赋值符号,比如直接打印,这时又是可见的,如下:

var=10
def func():
print("inner:",var)
print(var)
func()
print(var)

执行结果为:

10
inner: 10
10

如果在函数局部区域内对和全局变量同名的变量重新赋值时,注意此时赋值的并不是全局变量,而是一个全新的局部变量,而全局变量并未发生变化,如下:

var=10
def func():
var=20
print("inner:",var)

print(var)
func()
print(var)

此时执行结果为:

10
inner: 20
10

2、nonlocal的作用

  • nonlocal的作用是声明既不是全局变量,也不是局部变量
  • 如下代码,虽然使用global声明var,但是代码还是报错的,这是因为这里的var变量并不是全局变量,同时在最内层函数中也不是局部变量,在这种情况下就需要nonlocal关键字类声明
def outer():
var=10
def inner():
global var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)

outer()

如下代码:使用nonlocal声明之后,就可以正常执行了,这就是nonlocal关键字的作用

def outer():
var=10
def inner():
nonlocal var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)

outer()

执行结果如下:

10

in inner: 30

30


Python中如何正确使用global和nonlocal关键字?