局部变量和全局变量
函数内部没有global关键字:
①有声明局部变量:用函数内部自己的局部变量
②无声明局部变量:用函数外部的全局变量,虽然无法进行重新赋值,但对于可变类型的数据可进行内部数据的操作
函数内部有global关键字:
global声明全局变量时位于函数最前面
函数内部有nonlocal关键字:
nonlocal指定上一级变量
全局变量用全大写,局部变量用全小写
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 name = 'chen' 2 def test(): 3 global name #指向全局变量 4 name = 'li' 5 print(name) 6 test() 7 print(name) 8 # li 9 # li 10 11 12 name = 'chen' 13 def change(): 14 name = 'liu' 15 def change1(): 16 nonlocal name #指定上一级变量 17 name = 'li' 18 print(name) 19 change1() 20 print(name) 21 change() 22 print(name) 23 # li 24 # li 25 # chen 26 27 28 name='alex' 29 def foo(): 30 name='lhf' 31 def bar(): 32 name='wupeiqi' 33 def tt(): 34 print(name) 35 return tt 36 return bar 37 38 func=foo() #bar地址作为返回值传给func===>func = bar 39 print(func) 40 func()() #===>bar()()===>tt地址作为返回值传出来===>tt()==>print(name) 41 # <function foo.<locals>.bar at 0x0000001C74519BF8> 42 # wupeiqi 43 44 name='alex' 45 def foo(): 46 name='lhf' 47 def bar(): 48 print(name) 49 return bar 50 51 func=foo() #将bar地址作为返回值传给func====>func = bar 52 print(func) 53 func() #bar()====>print(name) 54 # <function foo.<locals>.bar at 0x0000001C74519B70> 55 # lhf