局部變量和全局變量數據結構
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
局部變量不能改全局變量主要是隻字符串和數值,一些複雜的數據結構【字典,列表,集合,類】是能夠改的。注意元組不行,由於元組自己就是不可變動的。ide
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匿名函數spa
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