您的位置:

Python变量作用域:全局和局部变量

Python是一种解释性语言,在编写代码时,变量的作用域是一个重要的问题。Python中的变量作用域分为局部变量和全局变量。局部变量是在函数内部定义的变量,全局变量是在函数外部定义的变量。

一、全局变量和局部变量

在Python中,定义变量时,变量默认是局部变量,局部变量只能在函数内部使用。全局变量定义在函数外部,可以在函数内部和外部使用。在函数内部定义全局变量时,需要使用global关键字。

x = 10 #全局变量
def func():
   y = 20 #局部变量
   global z #定义全局变量
   z = 30 
   print("x=",x)
   print("y=",y)
   print("z=",z)
func()
print("x=",x)
print("z=",z)

输出结果:

x = 10
y = 20
z = 30
x = 10
z = 30

在上面的代码中,全局变量x可以在函数内部和外部使用。局部变量y只能在函数内部使用。在函数内部定义全局变量z时,需要使用关键字global

二、函数中的变量作用域

在Python中,变量的作用域是相对的。在函数内部定义的变量可以在函数外部访问,但是函数外部定义的变量不能在函数内部直接访问。当函数内部和外部定义了同名变量时,函数内部使用的是局部变量。

x = 10 #全局变量
def func():
   x = 20 #局部变量
   print("x1=",x) #输出局部变量
func()
print("x2=",x) #输出全局变量

输出结果:

x1 = 20
x2 = 10

在上面的代码中,函数内部定义了一个局部变量x,但是函数外部也定义了一个同名变量x,所以在函数内部使用的是局部变量。

三、闭包中的变量作用域

闭包是指可以访问其他函数内部变量的函数。在Python中,闭包可以使用nonlocal关键字访问外部函数的变量。

def outer():
   x = 10 #outer内的局部变量
   def inner():
      nonlocal x #使用nonlocal关键字访问outer的x变量
      x = 20 #修改outer的x变量
      print("inner x=",x)
   return inner
f = outer()
f()

输出结果:

inner x = 20

在上面的代码中,函数inner使用了外部函数outer的变量x,并且通过nonlocal关键字修改了外部函数的变量。

四、总结

Python中变量作用域分为全局变量和局部变量。全局变量定义在函数外部,可以在函数内外使用。局部变量定义在函数内部,只能在函数内部使用。在函数内部定义全局变量时,需要使用global关键字。函数内部和外部定义同名变量时,函数内部使用的是局部变量。闭包可以访问外部函数的变量,并且使用nonlocal关键字访问外部函数的变量。