修改全局变量,声明函数内外使用同一个变量
示例:
1 name = 'xiaoming' 2 3 def test(): 4 global name 5 name = 'hello' 6 7 test() 8 print(name) 9 10 11 运行结果: 12 hello
声明函数内部使用同一个变量
name = 'xm' def test(): name = 'xh' def inner(): nonlocal name name = 'laowang' print('inner-->', name) inner() print('test-->', name) test() print('glocal-->', name) 运行结果: inner--> laowang test--> laowang glocal--> xm Process finished with exit code 0
前提:可变类型与不可变类型
不可变类型:类似C++的值传递,比如整数、元组等;传递的是变量的值,不会影响变量本身。
可变类型:类似C++的引用传递,如列表、字典等;将内存地址传递过去,将值进行修改,本身也会发生改变。
在函数内部如果修改了函数外部的变量,那么在内部创建了一个同名的新的变量和函数外部的是没关系的。
num = 1 def changeNum(); num =2 print(num) changeNum() print(num)
可变类型在函数内部进行了修改,那么在外部的变量也会发生改变。
def changDic(kwarg): print(kwarg) # 第三步 kwarg['sex'] = 'man' # 第四步 print(kwarg) # 第五步 dic = {'name':'xm', 'age':18} # 第一步 changDic(dic) # 第二步 print(dic) # 第六步