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
关键字访问外部函数的变量。