1.全局變量和局部變量
1
2
3
4
5
6
7
8
9
|
複製代碼 name = "czp" #全局變量 def func ( ) : name = "czp1" #局部變量 print ( name ) func ( ) 運行結果: czp 1 調用func ( ) 函數,程序會先在函數內部找有沒有 name 這個變量,如果有,就會調用該 name 的值,而如果沒有定義局部變量的話,函數會去找全局 name 。 複製代碼 |
01
02
03
04
05
06
07
08
09
10
11
12
|
複製代碼 name = "czp" #定義全局變量 def func ( ) : global name 在函數內部,通過 global 關鍵字,通過局部變量修改全局變量的值 name = "czp1" print ( name ) func ( ) 打印局部變量中 name 的值 print ( name ) 打印全局變量中 name 的值 運行結果: czp 1 czp 1 在運行結果中可以明顯看出,通過 global ,在定義局部變量的同時,也修改了全局變量的值 複製代碼 |
2.遞歸函數
01
02
03
04
05
06
07
08
09
10
11
12
13
|
複製代碼 def calc ( n ) : print ( n ) if int ( n / 2 ) = = 0 : return n return calc ( int ( n / 2 ) ) 在calc函數中,反覆調用calc自身,這樣的函數就是遞歸函數 calc ( 10 ) 運行結果: 10 5 2 1 複製代碼 |
3.匿名函數
1
2
3
4
5
|
def calc ( x ) : return x + 1 print ( calc ( 2 ) ) 運行結果: 3 |
1
2
3
4
|
res = lambda x : x + 1 print ( res ( 2 ) ) 運行結果: 3 |
1
2
3
4
5
6
7
8
9
|
複製代碼 res = map ( lambda x : x * * 2 , [ 2 , 4 , 6 , ] ) for i in res : print ( i ) 運行結果: 4 16 36 複製代碼 |
4.高階函數
01
02
03
04
05
06
07
08
09
10
11
12
|
複製代碼 將函數作爲參數傳給另一個函數 def foo ( n ) : print ( n ) def bar ( name ) : print ( "my name is %s" % name ) print ( foo ( bar ( "尼古拉斯趙四" ) ) ) 運行結果: my name is 尼古拉斯趙四 None None 返回兩個None,因爲在foo()和bar()函數中我沒有定義retturn。默認返回None 複製代碼 |
01
02
03
04
05
06
07
08
09
10
11
12
|
複製代碼 將函數作爲另一個函數的返回值 def bar ( ) : print ( "from bar" ) def foo ( ) : print ( "from foo" ) return bar foo ( ) ( ) 運行結果: from foo from bar 複製代碼 |
4.內置函數
1.map:
01
02
03
04
05
06
07
08
09
10
11
|
複製代碼 name = [ 1 , 2 , 3 , 4 ] res = [] 定義一個空列表,用來接收自增一後的值 def calc ( array ) : for i in array : 使用 for 循環,遍歷傳入列表中的每一個元素 res.append ( i + 1 ) return res print ( calc ( name ) ) 運行結果: [ 2 , 3 , 4 , 5 ] 複製代碼 |
01
02
03
04
05
06
07
08
09
10
11
12
13
|
複製代碼 def increase ( x ) : return x -1 定義一個自減 1 的函數 name = [ 1 , 2 , 3 , 4 ] res = [] def calc ( func , array ) : 在這裏定義兩個形參,一個用來傳入函數increase,一個用來傳入列表 name for i in array : res.append ( increase ( i ) ) return res print ( calc ( increase , name ) ) 運行結果: [ 0 , 1 , 2 , 3 ] 複製代碼 |
1
2
3
4
|
name = [ 1 , 2 , 3 , 4 ] print ( list ( map ( lambda x : x + 1 , name ) ) ) 運行結果: [ 2 , 3 , 4 , 5 ] |
2.reduce:
1
2
3
4
5
|
from functools import reduce 必須導入reduce方法 name = [ 1 , 2 , 3 , 4 ] print ( ( reduce ( lambda x , y : x + y , name ) ) ) 函數必須傳入兩個參數,然後傳入 list 。 運行結果: 10 |
def reduce(function, sequence, initial=None) 這個初始值默認爲None
1
2
3
4
5
|
from functools import reduce name = [ 1 , 2 , 3 , 4 ] print ( ( reduce ( lambda x , y : x + y , name , 5 ) ) ) 還是上面的例子,我在最後加了初始值 5 (默認是none) 運行結果: 15 |
3.filter
1
2
3
4
|
name = [ "czp" , "cc" , "zp1" ] print ( list ( filter ( lambda n : n.endswith ( "c" ) , name ) ) ) 通過匿名函數判斷條件,返回值爲真,就會打印成列表的形式 運行結果: ['cc'] |
{:8_507:}