[ Python ] 匿名函數和高階函數

1. 匿名函數

lambda:一個語法,三個特性,四個用法html

語法:
 lambda argument_list: expression
argument_list 和 expression 由用戶自定義python

 

(1)argument_list 是參數列表。它的結構與 python 中函數的參數列表是同樣的。express

a, b
	a=1, b=2
	*args
	**kwargs
	a, b=1, *args
	空
	……

 

(2)expression 是一個關於參數的表達式。表達式中出現的參數須要在 argument_list 中定義,而且表達式只能是單行的,以下:編程

1
	None
	a + b 
	sum(a)
	1 if a > 10 else 0

 

lambda argument_list: expression 表示的是一個函數,一個匿名函數。函數式編程

三個特性:
    (1)lambda 函數是匿名的;所謂匿名函數,通俗地說就是沒有名字的函數。lambda 函數沒有名字;
    (2)lambda 函數有輸入和輸出;輸入是傳入到參數列表 argument_list 的值,輸出是根據表達式 expression 計算獲得的值;
    (3)lambda 函數通常功能簡單,單行 expression 決定了 lambda 函數不可能完成複雜的邏輯,只能完成很是簡單的功能函數

 

四個用法:
    (1)將 lambda 函數賦值給一個變量,經過這個變量間接調用該 lambda 函數
    (2)將 lambda 函數做爲其餘函數的返回值,返回給調用者
    (3)將 lambda 函數做爲參數傳遞給其餘函數
    (4)將lambda 函數賦值給其餘函數,從而將其餘函數用該 lambda 函數替換spa

 

python編程方式
    python 編程方式分爲:
        (1)面向過程
        (2)函數式編程
            不用變量保存狀態,不修改變量
            函數即變量
        (3)面向對象code

 

2. 高階函數

    (1)函數接收參數是一個函數名
    (2)返回值中包含函數
    把函數做爲參數傳入,這樣的函數稱爲高階函數htm

 

(1)map對象

map函數接收兩個參數,一個是函數,一個是 iterable。map將傳入的函數依次做用到每一個元素,並把結果做爲新的 iterator 返回

def f(x):
        return x * x


m = map(f, [1, 2, 3, 4])
# iterator 是惰性序列,所以經過 list() 函數讓它把整個序列都計算出來並返回一個list
print(list(m))

# 執行結果:
# [1, 4, 9, 16]

 

(2)filter
filter接收一個函數和一個序列。filter() 把傳入的函數依次做用於每一個元素,而後根據返回值是 True 和 False 決定保留仍是丟棄該元素。

def is_odd(n):
        return n % 2 == 1

# f = filter(is_odd, [1,2,3,4,5,6,7]) 
# 等價於
f = filter(lambda n: n % 2 == 1, [1,2,3,4,5,6,7])
print(list(f))

# 執行結果:
# [1, 3, 5, 7]

 

(3)reduce
reduce 把一個函數做用於一個序列上,這個函數必須接收兩個參數,reduce把結果繼續和下一個元素作累計計算

from functools import reduce
def foo(x, y):
        return x + y

# r = reduce(foo, [1,2,3,4])
# 等價於:
r = reduce(lambda x, y: x + y, [1,2,3,4])
print(r)

 

3. python 內置函數

  python 內置函數用法。

相關文章
相關標籤/搜索