Python之变量的作用域

宿舍 2019-11-11

变量的作用域:指变量被使用的范围,根据变量定义的范围,可分为全局变量和局部变量

全局变量:一般定义在函数体外或类外

局部变量:一般定义在函数体内,而在类中定义的变量,称之为类变量或者是实例变量

全局变量的访问、修改

name = "C"  #全局变量
print("我的名字是:{0}".format(name))
def ShowLanguageInfo():
    age = 28 #局部变量
    name = "Python" #想要修改全局变量的值,却失败了
    print("我的名字是:{0},今年{1}岁了".format(name, age))
    
ShowLanguageInfo()
print("我的名字是:{0}".format(name))

>>>
我的名字是:C
我的名字是:Python,今年28岁了
我的名字是:C

使用global来声明变量为全局变量

name = "C"  #全局变量
print("我的名字是:{0}".format(name))
def ShowLanguageInfo():
    age = 28 #局部变量
    #name = "Python" #想要修改全局变量的值,却失败了
    global name #声明name为全局变量,使用global说明
    name = "Python"
    print("我的名字是:{0},今年{1}岁了".format(name, age))

ShowLanguageInfo()
print("我的名字是:{0}".format(name))

>>>
我的名字是:C
我的名字是:Python,今年28岁了
我的名字是:Python

在嵌套使用情景时,如何来修改局部变量呢

name = "C"  #全局变量
print("我的名字是:{0}".format(name))
def ShowLanguageInfo():
    age = 28 #局部变量
    #name = "Python" #想要修改全局变量的值,却失败了
    global name #声明name为全局变量,使用global说明
    name = "Python"
    print("我的名字是:{0},今年{1}岁了".format(name, age))

    def SetAge():
        age = 18 #想要修改局部变量 修改年龄,设置为永远18岁
        print("我的名字是:{0},今年{1}岁了".format(name, age))
    
    SetAge() #打印验证

    print("我的名字是:{0},今年{1}岁了".format(name, age)) #再次验证是否真正修改年龄成功,发现并没有

ShowLanguageInfo()

print("我的名字是:{0}".format(name))

>>>
我的名字是:C
我的名字是:Python,今年28岁了
我的名字是:Python,今年18岁了
我的名字是:Python,今年28岁了
我的名字是:Python

使用nonlocal来说明该变量为外部局部变量,而非全局变量

name = "C"  #全局变量
print("我的名字是:{0}".format(name))
def ShowLanguageInfo():
    age = 28 #局部变量
    #name = "Python" #想要修改全局变量的值,却失败了
    global name #声明name为全局变量,使用global说明
    name = "Python"
    print("我的名字是:{0},今年{1}岁了".format(name, age))

    def SetAge():
        #age = 18 #想要修改局部变量 修改年龄,设置为永远18岁
        nonlocal age #声明age为外部局部变量,而非全局变量,使用nonlocal说明
        age = 18
        print("我的名字是:{0},今年{1}岁了".format(name, age))
    
    SetAge() #打印验证

    print("我的名字是:{0},今年{1}岁了".format(name, age)) #再次验证是否真正修改年龄成功,发现成功

ShowLanguageInfo()

print("我的名字是:{0}".format(name))

>>>
我的名字是:C
我的名字是:Python,今年28岁了
我的名字是:Python,今年18岁了
我的名字是:Python,今年18岁了
我的名字是:Python