在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
name='charon' def change_name(): print('我的名字',name) change_name() def change_name(): name='pluto' print('我的名字',name) change_name() print(name) def change_name(): global name name='pluto' print('我的名字',name) change_name() print(name) 结果: 我的名字 charon 我的名字 pluto charon 我的名字 pluto pluto
能够把变量私有化的只能是函数
global关键字
name='charon' def change_name(): global name#将最外层的name='charon'拿过来了,声明name就是那个全局变量 name='pluto'#声明了修改上面拿过来的全局变量 print('我的名字',name) def change01_name(): print("我的名字",name) change_name() change01_name() 结果: 我的名字 pluto 我的名字 pluto name='charon' def change_name(): # global name # name='pluto' print('我的名字',name) def change01_name(): print("我的名字",name) change_name() change01_name() 结果: 我的名字 charon 我的名字 charon name='charon' def change_name(): global name name='pluto' print('我的名字',name) def change01_name(): print("我的名字",name) change01_name() change_name() 结果: 我的名字 charon 我的名字 pluto
规范:局部变量全小写,局部变量全大写 x
# 如果函数中有global关键字,变量本质上就是全局的那个变量
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 name = "冷静" weiweihou() print(name) print(name) weihou() print(name)
结果:
刚娘 冷静 刚娘
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): global name #指定全局变量,name= "刚娘" name = "冷静" weiweihou() print(name)#weiweihou内改变的name变量是全局的,没有改陈卓那个变量,所以weihou调用的仍然是name = "陈卓" print(name) weihou() print(name) 结果: 刚娘 陈卓 冷静