Python之变量的作用域

Posted no-end-to-learning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之变量的作用域相关的知识,希望对你有一定的参考价值。

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

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

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

全局变量的访问、修改

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

 

以上是关于Python之变量的作用域的主要内容,如果未能解决你的问题,请参考以下文章

Python之变量作用域

Python函数之返回值作用域和局部变量

Python之变量的作用域

python入门之作用域

Python20之全局变量和局部变量

python进阶之命名空间与作用域