全局变量和局部变量笔记

  一般全局变量用大写来表示,局部变量用小写容易区分

  全局变量和局部变量如果在全局变量不大写和局部变量一样小写很容易蒙圈的

name = "eason"

def change_name():
    # global name #更改全局变量,但是出现bug不容易查找
    name1 = "白月初"
    print("change_name",name)#局部变量中如果没有name就使用全局变量的name
    print("change_name", name1)

change_name() #局部变量,name = "白月初"
print("打印全局变量:",name)

结果

change_name eason
change_name 白月初
打印全局变量: eason

下面是全局变量和局部变量大小写的比较

name = "白月初" #第1步

def tushan(): #第2步整体定义函数
    name = "涂山红红"  #第5步
    def tushanda():  #第6步
        global name #第8步#调入全局变量,global要在当前子函数前面
        name = "蓉蓉" #第9步#更改全局变量为"蓉蓉"
    tushanda()  #第7步
    print(name) #第10步因为tushanda()没有改变局部变量所以还是打印"涂山红红"
print(name)#第3步,因为函数条件没有触发,先跳过执行下一个
tushan() #第4步触发函数条件,调用函数
print(name) #第11步

结果

白月初
涂山红红
蓉蓉

大写全局变量

NAME = "白月初" #第1步

def tushan(): #第4步
    name = "涂山红红"  #第5步
    def tushanda():  #第7步
        global NAME #第8步#调入全局变量,global要在当前子函数前面
        NAME = "蓉蓉" #第9步#更改全局变量为"蓉蓉"
    tushanda()  #第6步
    print(name)#第10步因为tushanda()没有改变局部变量所以还是打印"涂山红红"
    print(NAME) #第11步调用的是全局变量
print(NAME)#第2步,因为函数条件没有触发,先跳过执行下一个
tushan() #第3步触发函数条件,调用函数
print(NAME) #第12步

结果

白月初
涂山红红
蓉蓉
蓉蓉

nonlocal指向上一级局部变量

name = "白月初"

def tushan():
    name = "涂山红红"
    def tushanda():
        nonlocal name #nonlocal指的是上一级变量
        name = "蓉蓉"
    tushanda()
    print(name)
print(name)
tushan()
print(name)

结果

白月初
蓉蓉
白月初

 

posted @ 2018-04-13 20:35  重铸根基  阅读(300)  评论(0编辑  收藏  举报