局部变量和全局变量

 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 >>>>>>9
4 >>>>print(calc) 是内存地址
5 #lambda只能处理三元运算,复杂的类似for循环就处理不了了
6 x = lambda n:3 if n<3 else n
x(7)
>>>>>>7

 

posted on 2018-08-09 16:16  阿橙  阅读(706)  评论(0编辑  收藏  举报