全局变量与局部变量
全局变量变量名大写
局部变量变量名小写
优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
但是对于可变类型,可以对内部元素进行操作
如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”
golbal 关键字
要注意函数定义与引用的前后关系
name='lhf' def change_name(): global name name='帅了一比' print('change_name',name) change_name() print(name)
输出
change_name 帅了一比
帅了一比
NAME = "杠娘" def yangjian(): #NAME = "史正文" #报错 global NAME NAME = "小东北" print('我要搞', NAME) def qupengfei(): NAME = "基" print('我要搞', NAME) yangjian() qupengfei()
输出
我要搞 小东北
我要搞 基
# 如果函数的内容无global关键字, # - 有声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" print('我要搞', NAME) qupengfei()
输出
我要搞 自己
NAME = ["产品经理","廖波湿"] def qupengfei(): NAME.append('XXOO') print('我要搞', NAME) qupengfei()
输出
我要搞 ['产品经理', '廖波湿', 'XXOO']
# 错误示例 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" global NAME print('我要搞', NAME) qupengfei()
输出
SyntaxError: name 'NAME' is assigned to before global declaration
NAME = ["产品经理","廖波湿"] def qupengfei(): global NAME NAME = ["阿毛"] NAME.append('XXOO') print('我要搞', NAME) qupengfei()
输出
我要搞 ['阿毛', 'XXOO']
NAME = ["产品经理","廖波湿"] def yangjian(): #NAME = "史正文" global NAME # 已经声明,NAME就是全局的的那个变量 print('我要搞', NAME) NAME = "小东北" # 修改 全局的变量 print('我要搞', NAME) yangjian()
输出
我要搞 ['产品经理', '廖波湿'] 我要搞 小东北
NAME = ["产品经理","廖波湿"] def qupengfei(): name = "自己" global NAME print('我要搞', NAME) qupengfei()
输出
我要搞 ['产品经理', '廖波湿']
#要搞清楚定义 与执行的关系
NAME = '海风' def huangwei(): #1 name = "黄伟" #3 print(name) #4 def liuyang(): #6 name = "刘洋" #7 print(name) def nulige(): name = '沪指花' print(name) print(name) nulige() liuyang() #5 print(name) huangwei() #2
输出
黄伟
刘洋
刘洋
沪指花
黄伟
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 name = "冷静" weiweihou() print(name) print(name) weihou() print(name)
输出
刚娘
冷静
刚娘