全局变量和局部变量

全局变量一般大写,局部变量一般小写

global关键字,指代全局变量

如果函数内部无global关键字:

#优先读取局部变量,然后在读取全部变量

如果函数内部有global关键字:

#global  变量名  ,此时这个变量就是全局变量,可以对修改全局变量,可读取可修改

nonlocal关键字,指代上一级变量

无global的情况

def change_l():
name = 'zzz'
print("l-",name)
change_l() #输出l- zzz,未改变全局变量的值
print(NAME) #输出列表['a','b']
print("----------end-----------")

def change_o():
NAME.append('c') #可以对其里面的值进行操作
print("o-",NAME)
change_o()
print(NAME) #输出['a','b','c']
print("-------------end----------")

有global的情况

def change_m():
global NAME
name = 'DDD' #修改全局变量为DDD
print("m-",name)
change_m()
print(NAME) #改变全局变量,输出DDD
print("-------------end----------")

nonlocal:指上一级变量

name = 'code' #(1)
def one(): #(2)
name = 'copy' #(5)
def two(): #(6)
nonlocal name #(8) #nonlocal指上一级变量name='copy',把copy修改成finished
name = 'finished' #(9)
two() #(7)
print(name) #(10) 输出finished
print(name) #(3) 输出code
one() #(4)
print(name) #(11) 输出code
print("-------------end-----------")

原文地址:https://www.cnblogs.com/shadowfolk/p/14264629.html