Python—全局变量、局部变量、匿名函数

独自空忆成欢 提交于 2019-12-18 10:50:04

 

局部变量和全局变量

 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   

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!