2020,作一個無可替代的人!
前面寫的 Python 入門教程中只有基礎入門和基礎進階兩部分,能夠在公衆號下拉菜單中
找到,小一我都已經分好類了。python
作數據分析的話,我以爲高階部分的內容你一節都不要錯過,這部份內容算是數據預處理的核心了。框架
我也將會從高階函數的使用
,NumPy
,SciPy
,Pandas
以及可能會用到的 Scikit-learn
幾個部分開始。函數
你可能如今還不懂這些基礎包是幹什麼的,這不重要,我會在乾貨內容中插入一些我踩過坑的小項目,回過頭你再來品一下文章,想必收穫會很是大。
oop
準確的說,Lambda 函數並不能稱爲高階函數。可是在實際項目的開發過程當中,Lambda 函數使用的至關頻繁,而且效率也至關高,因此,一塊兒來看看吧!大數據
Lambda 函數又稱爲 Python 的匿名函數,一次性函數。
Lambda函數是使用 lambda 運算符建立的,能夠包含任意多的參數,但它只有一個表達式。其語法以下:spa
lambda參數:表達式
翻譯
例如:計算一個數的平方3d
# 經過 lambda 表達式計算一個數的平方 result = lambda x: x*x print(result(5))
例如:計算兩個數相乘code
# 經過 lambda 表達式計算兩個數相乘 result = lambda x, y: x*y print(result(2, 5))
可能你們都明白 lambda 函數怎麼用了吧。對象
相比起普通函數,爲何 lambda 表達式會更簡單方便呢
,我再舉個例子:
# 輸出10之內每一個數乘以2: # 定義函數 def new_func(number): return number*2 # 通常函數寫法 result_number = [new_func(number) for number in range(10)] print(result_number) # lambda 函數寫法 result_number = list(map(lambda x: x*2, [number for number in range(10)])) print(result_number) # 輸出結果 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
能夠看到,一樣的結果,使用 lambda 的方式會更簡單些。
這裏在 lambda 表達式中使用了高階函數 map,後面也會介紹到,往下看
說到map,我首先想到的是 Java 中的 map 數據類型,Map<K,V>一種鍵值對的存儲方式。
其次想到的是 reduce,map-reduce,Hadoop早期的一種大數據處理方式。
放一張 Google MapReduce 的中文版摘要,你們細品
map 函數是 Python 的內建函數,能夠直接使用。
map() 函數接接收兩個參數,一個是 函數,一個是 可迭代對象 Iterable。
map將傳入的函數依次做用到每一個Iterable 上,並把結果做爲新的 Iterator 返回
。
別慌,上面一段話你可能雲裏霧裏,我舉個例子你在品
舉例:有一個函數f(x)=x*2,要把這個函數做用在list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]上
熟不熟悉?這不就是上面 lambda 中的例子嗎?
其中,0-9數據集合是可迭代對象, f(x)=x*2做爲咱們的 lambda 函數,返回的新數據集是 Iterator
。
再來個例子,將剛纔的 list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 所有轉換爲字符
# 將[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 所有轉換爲字符 list(map(str, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) # 輸出 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
看懂了吧,map() 就是一個映射函數,會根據提供的函數對指定序列作映射,映射的結果能夠進行相應的類型轉換
。
再來看 reduce 函數,reduce 函數也是 Python 的內建函數,能夠直接使用。
reduce() 函數接收和 map 一樣的兩個參數,不一樣的是 reduce 把上一次的結果繼續和序列的下一個元素作累積計算
。
直接看例子:
# 猜猜這是在幹嗎? reduce(lambda x,y: x+y, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 輸出 45
你可能猜到了,作累加
,對,沒錯!0~9數字的累加和,結果是45
reduce 函數的效果能夠這樣表示
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
再來張圖,別說你還看不懂:
reduce() 是累積運算函數,會根據提供的運算函數對迭代類型參數中的元素進行累積運算
。
filter 的中文翻譯是過濾
,filter 函數也是 Python 的內建函數,能夠直接使用。
filter() 函數一樣接收兩個參數:一個函數和一個序列。
filter() 把傳入的函數依次做用於每一個元素,而後根據返回值是 True 或者 False 決定保留仍是丟棄該元素
。
這個介紹應該都能看懂,就把 filter 想象成一個過濾器。
看個例子:對於 list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 輸出其中的偶數
# 輸出全部的偶數 list(filter(lambda x:x%2==0, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 輸出 [2, 4, 6, 8]
很簡單,filter() 是過濾函數,會根據提供的過濾函數對迭代類型參數中的元素進行過濾,保留使運算函數返回 true 的元素。
sorted 函數也如它的中文意思同樣,能夠對全部可迭代的對象進行排序操做。
看一下sorted 的語法 :
sorted(iterable, cmp=None, key=None, reverse=False)
舉例1:將[2, 5, 7, 8, 1, -1]從大到小排列
sorted([2, 5, 7, 8, 1, -1], reverse=True) # 輸出 [8, 7, 5, 2, 1, -1]
舉例2:將 [('b',2),('a',1),('c',3),('d',4)] 比較每一個元組的第一位數進行排序
list_number = [('b', 2), ('a', 1), ('c', 3), ('d', 4)] sorted(list_number, key=lambda x: x[0]) # 輸出 [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
能夠看到,sorted 函數支持的排序更加的普遍。
這裏不要將 sort 和 sorted 搞混了,sort 函數用於對列表進行排序,而 sorted 函數支持對全部可迭代對象進行排序
。
今天介紹了 Python 的一些高階函數,並且是最經常使用的一些。
春節期間在家裏就開始準備了高階部分的內容,確實很差寫。
在寫的時候得想一想以前本身都踩過的哪些坑,本身是怎麼認識並使用這些高階技巧的,因此到如今我也只寫了一小丟丟內容。(熬夜多了腦殼記不住事啊)
就拿今天的幾個高階函數來講,我剛開始接觸的時候不知道這些函數這麼有用,甚至都不知道這些函數,並不重視,等到本身造完輪子以後才發現是在作無用功。
2019年公衆號的文章進度是在爬蟲這一部分,還有爬蟲框架沒有介紹,乾貨內容也很少了,後面應該會多一些實戰的爬蟲項目。
可是,我在爬蟲剛開始的時候就說過,數據分析的重點不是爬蟲,是在數據處理這一塊,你們最好能分清重點,之後就再也不多說了。
2020年的第一篇乾貨文章,我須要大家的支持! 關注點贊噢!方便之後的高階文章大家不會錯過,建議直接關注公衆號[知秋小夢]!!!
原創不易,歡迎點贊噢
文章首發:公衆號【知秋小夢】文章同步:掘金,簡書
原文連接: Python入門高階教程-高階函數