微信公衆號:碼農充電站pro
我的主頁:https://codeshellme.github.iohtml
對於那些快速算法,咱們老是能夠拿一些速度差很少可是更容易理解的算法來替代它們。
—— Douglas Jonespython
目錄git
高階函數
通常以函數爲參數。github
本節咱們介紹Python 中三個方便的高階函數,分別是:算法
若是你瞭解過分佈式系統框架---Hadoop
,你應該知道map/reduce
的概念。shell
Python 中的map/reduce
函數與Hadoop
中的map/reduce
基本相似。apache
在Python2
中,map
是一個函數。在Python3
中,map
是一個類:微信
>>> map <class 'map'>
做用:將函數
func
做用於可迭代對象iterable
中的每個元素
原型:map(func, iterable) -> map object
參數 func:一個函數類型的參數,該函數接收一個參數,並返回一個值
參數 iterable:一個可迭代的對象
返回值:一個map
對象,同時一個迭代器數據結構
示例:框架
>>> m = map(lambda x: x * x, [1, 3, 5]) >>> m <map object at 0x7fe60bb1bf98> >>> l = [i for i in m] >>> l [1, 9, 25]
參數func
能夠是普通函數,也能夠是匿名函數
,咱們這裏使用了匿名函數lambda x: x * x
,該函數接收一個參數,並返回該參數的平方。
可迭代對象是一個列表[1, 3, 5]
,列表中的每一個元素,都將傳遞到匿名函數中,並對每個元素計算平方後,將結果存儲到一個map
對象m
中。
爲了查看m
中的值,咱們使用列表推導式
生成了一個列表l
,可看到列表l
就是[1, 9, 25]
,就是[1, 3, 5]
中每一個元素的平方。
這就是python3 中map
的基本使用方法。
在Python3 中,reduce
函數被放在functools
模塊,使用時,要先從functools
模塊引入:
>>> from functools import reduce
做用:將函數
func
做用於序列seq
中的元素,進行一系列的計算
原型:reduce(func, seq[, initial]) -> value
參數 func:這是一個函數類型的參數,該函數接收兩個參數,並返回一個值
參數 seq:一個序列
參數 initial:當
initial
存在時:reduce(func, [x1, x2, x3], initial) = func(func(func(initial, x1), x2), x3)
當initial
不存在時:reduce(func, [x1, x2, x3]) = func(func(x1, x2), x3)
返回值:返回計算結果
示例,當initial
存在時:
>>> reduce(lambda x, y : x * y, [1, 3, 5], 6) 90 # reduce(func, [1, 3, 5], 6) # = func(func(func(6, 1), 3), 5) # = ((6 * 1) * 3) * 5 # = 90
示例,當initial
不存在時:
>>> reduce(lambda x, y : x * y, [1, 3, 5]) 15 # reduce(func, [1, 3, 5]) # = func(func(1, 3), 5) # = (1 * 3) * 5 # = 15
在Python3 中,filter
是一個類:
>>> filter <class 'filter'>
做用:filter 用於對
可迭代
對象iterable
進行過濾,iterable
中的每個元素會做爲一個參數,傳遞到func
中
原型:filter(func, iterable) --> filter object
參數 func:這是一個函數類型的參數,該函數接受一個參數,返回一個bool
值當
func
返回True
時:對應的iterable
中的元素,會放在結果集中
當func
返回False
時:對應的iterable
中的元素,不會放在結果集中返回值:一個
filter
對象,同時也是一個迭代器
示例:
>>> f = filter(lambda x: len(x) == 2, ['dsf', 'df', 'ad', 'dfas', 'as']) >>> f # 一個 filter 對象 <filter object at 0x7f4dff484748> >>> list(f) # 轉化爲列表,方便查看 ['df', 'ad', 'as']
(完。)
推薦閱讀:
Python 簡明教程 --- 14,Python 數據結構進階
歡迎關注做者公衆號,獲取更多技術乾貨。