局部变量和全局变量
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