Python 簡明教程 --- 16,Python 高階函數

微信公衆號:碼農充電站pro
我的主頁:https://codeshellme.github.iohtml

對於那些快速算法,咱們老是能夠拿一些速度差很少可是更容易理解的算法來替代它們。
—— Douglas Jonespython

目錄git

在這裏插入圖片描述

高階函數通常以函數爲參數。github

本節咱們介紹Python 中三個方便的高階函數,分別是:算法

  • map
  • reduce
  • filter

若是你瞭解過分佈式系統框架---Hadoop,你應該知道map/reduce 的概念。shell

Python 中的map/reduce 函數與Hadoop 中的map/reduce 基本相似。apache

1,map 函數

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 的基本使用方法。

2,reduce 函數

在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

3,filter 函數

在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 簡明教程 --- 11,Python 元組

Python 簡明教程 --- 12,Python 字典

Python 簡明教程 --- 13,Python 集合

Python 簡明教程 --- 14,Python 數據結構進階

Python 簡明教程 --- 15,Python 函數


歡迎關注做者公衆號,獲取更多技術乾貨。

碼農充電站pro

相關文章
相關標籤/搜索