局部变量和全局变量
1 college1 = 'JMU' #全局变量 2 def change_name(name): 3 college1 = 'LiGong' #局部变量,此函数是其作用域 4 # global school #可以在函数内定义全局变量,这样在函数外调用函数体内的school则不会报错。但是千万不要这么干!不要在函数体内定义全局变量 5 # school = 'jmu' 6 print("before change:%s"%name,college1) 7 name = 'GKX' #局部变量,此函数是其作用域 8 print('After change:%s'%name) 9 10 name = 'gkx' 11 change_name(name) 12 print('now name is:%s'%name) 13 print(college1) 14 >>>>>> 15 before change:gkx LiGong #在函数体内部college的值是 ‘LiGong’,在其作用域内 16 After change:GKX 17 now name is:gkx #在函数外name的值还是gkx 18 JMU #在函数外college的值还是JMU
局部变量不能改全局变量主要是只字符串和数值,一些复杂的数据结构【字典,列表,集合,类】是可以改的。注意元组不行,因为元组本身就是不可变更的。
1 names = ['gkx','lion','cat'] 2 def change_name(): 3 names[0]='chimpanzee' 4 print("inside func ",names) 5 change_name() 6 print(names) 7 8 >>>>> 9 inside func ['chimpanzee', 'lion', 'cat'] 10 ['chimpanzee', 'lion', 'cat']
global 和 nonlocal
1 a = 1 2 def outer(): 3 a = 1 4 print('outer') 5 def inner(): 6 print('inner') 7 def inner2(): 8 nonlocal a #声明了一个上一层的局部变量,对全局无效,对局部也只是对最近的一层有影响。此处若是 global 会修改全局,最上层的a。 9 a += 1 #此处若是没声明 nonlocal a是不能被改变的 10 print('inner2222') 11 print('***a***, ',a) 12 inner2() 13 inner() 14 15 outer() 16 print(a) 17 >>>> 18 outer 19 inner 20 inner2222 21 ***a***, 2 22 1
lambda匿名函数
1 calc = lambda x:x*3 #用lambda定义了匿名函数 2 print(calc(3)) 3 >>>>>>94 >>>>print(calc) 是内存地址5 #lambda只能处理三元运算,复杂的类似for循环就处理不了了6 x = lambda n:3 if n<3 else n x(7)>>>>>>7
来源:https://www.cnblogs.com/gkx0731/p/9449681.html