https://www.cnblogs.com/linhaifeng/articles/6113086.html
——————————————————————————————————————
五、局部变量与全局变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
name='lhf' def change_name(): print('我的名字',name) change_name()
运行结果:
我的名字 lhf
def change_name(): name='帅了一笔' print('我的名字',name) change_name() print(name)
运行结果:
我的名字 帅了一笔
lhf
def change_name(): global name name='帅了一笔' print('我的名字',name) change_name() print(name)
运行结果:
我的名字 帅了一笔
帅了一笔
NAME = "产品经理" def yangjian(): global NAME # 已经声明,NAME就是全局的的那个变量 print('我要搞', NAME) NAME = "小东北" # 修改 全局的变量 print('我要搞', NAME) yangjian()
运行结果:
我要搞 产品经理
我要搞 小东北
#如果函数的内容无global关键字
-有声明局部变量
NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" print('我要搞', NAME) qupengfei()
运行结果:
我要搞 自己
-无声明局部变量
NAME = ["产品经理", "廖波湿"] def qupengfei(): NAME.append('XXOO') print('我要搞', NAME) qupengfei()
运行结果:
我要搞 ['产品经理', '廖波湿', 'XXOO']
#如果函数中有global关键字
-有声明局部变量
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']
*** 全局变量变量名大写
*** 局部变量变量名小写
#优先读取局部变量,若无则只能读取全局变量,无法对全局变量重新赋值
#但是对于可变类型,可以对内部元素进行操作
#如果函数中有global关键字,变量本质上就是全局变量,可读取可赋值 NAME='fff'
NAME = '海风' def huangwei(): name = "黄伟" print(name) def liuyang(): name = "刘洋" print(name) def nulige(): name = '沪指花' print(name) print(name) nulige() liuyang() print(name) huangwei()
运行结果:
黄伟
刘洋
刘洋
沪指花
黄伟
解题思路:
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): global name #获取的是全局的name,并没有改变weihou()内的name = "陈卓" name = "冷静" weiweihou() print(name) #所以输出 陈卓 print(name) weihou() print(name)
运行结果:
刚娘
陈卓
冷静
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 name = "冷静" weiweihou() print(name) print(name) weihou() print(name)
运行结果:
刚娘
冷静
刚娘