Python函數式編程 函數式編程可以使代碼更加簡潔,易於理解。Python提供的常見函數式編程方法如下: map(函數,可迭代式) 映射函數 filter(函數,可迭代式) 過濾函數 reduce(函數,可迭代式) 規約函數 lambda 函數 列表推導式 zip()函數 1列表推導式 [1, 2 ...
Python函數式編程
函數式編程可以使代碼更加簡潔,易於理解。Python提供的常見函數式編程方法如下:
- map(函數,可迭代式)映射函數
- filter(函數,可迭代式)過濾函數
- reduce(函數,可迭代式)規約函數
- lambda函數
- 列表推導式
- zip()函數
1列表推導式
#list(range(1,11)) 結果為[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
x = [item for item in range(1,8)]
print(x)
[1, 2, 3, 4, 5, 6, 7]
x = [item for item in range(1,8) if item % 2 == 0]
print(x)
[2, 4, 6]
area = [(x,y) for x in range(1,5) for y in range(1,5) if x!=y]
print(area)
[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
dict(area) # 採用字典對area列表打包,相同的鍵的元素,後面覆蓋前面的鍵
{1: 4, 2: 4, 3: 4, 4: 3}
['The number: %s' % n for n in range(1,4)]
['The number: 1', 'The number: 2', 'The number: 3']
dict1 = {'1':'A','2':'B','3':'C','4':'D'}
[k + '=' + v for k, v in dict1.items()]
['1=A', '2=B', '3=C', '4=D']
2 lambda函數
- lambda 參數: 表達式(expression)
- 用於簡單函數的定義
- 返回值就是函數體中的表達式的求值結果
lambda x,y: x*y
<function __main__.<lambda>>
(lambda x,y: x*y)(9,9)
81
f = lambda x,y: x/y
f(10,2)
5.0
3 map()函數
- map(function, iterable, ...)
- 返回結果為map迭代式
list(map(lambda x : x**3,[1,2,3,4]))
[1, 8, 27, 64]
list(map(lambda x,y:x+y, [1,2,3,4],[4,5,6,7]))
[5, 7, 9, 11]
4 reduce()函數
- reduce(函數,迭代式)
- 對迭代式中的元素按函數依次計算後返回唯一結果
from functools import reduce
reduce((lambda x,y:x+y), [1,2,3,4]) # 等價於 1+2+3+4
10
reduce((lambda x,y:x+y), [1,2,3,4], 90) # 等價於 90+1+2+3+4
100
reduce((lambda x,y:x/y), [1,2,3,4,5]) # 等價於 1/2/3/4/5=1/120
0.008333333333333333
5 filter()函數
- filter(函數, iterable)
- 如果第一個參數是一個函數,那麼將第二個可迭代數據里的每一個元素作為函數的參數進行計算,把返回Ture的值篩選出來
- 過濾器的作用是過濾到我們不關心的數據,保留有用的數據
list(filter(None,[11,1,2,0,0,0,False,True]))
[11, 1, 2, True]
list(filter(lambda x:x%2, range(1,11)))
[1, 3, 5, 7, 9]
list(filter(lambda x: x.isalpha(),'a11b22c33d44'))
['a', 'b', 'c', 'd']
tuple(filter(lambda x: x.isalpha(),'a11b22c33d44'))
('a', 'b', 'c', 'd')
set(filter(lambda x: x.isalpha(),'a11b22c33d44'))
{'a', 'b', 'c', 'd'}
list(filter(lambda x:x>4, [1,2,3,4,5,6,7]))
[5, 6, 7]
set(filter(lambda x:x>4, [1,2,3,4,5,6,7]))
{5, 6, 7}
6 zip()函數
- 參數:元組、列表、字典等迭代器。
- zip(x1)從x1中依次取一個元組,組成一個元組
- zip(x1,x2)分別從x1和x2依次各取出一個元素組成元組,所有元組組合成一個新的迭代器
x1 = [1, 2, 3, 4]
z = zip(x1)
print(type(z))
print(list(z))
<class 'zip'>
[(1,), (2,), (3,), (4,)]
x1 = [1,2,3,4,5]
x2 = [6,7,8,9,10]
z1 = zip(x1,x2)
print(list(z1))
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]