匿名函式(anonymous function)是指一類無需定義識別符號(函式名)的函式。通俗來講,就是它可以讓我們的函式,可以不需要函式名。
正常情況下,我們定義乙個函式,使用的是def關鍵字,而當你學會使用匿名函式後,替代def的是lambda。
下面就def和lambda分別舉例說明:
def mysum(x, y):從上面的示例,我們可以看到匿名函式直接執行,省下了很多行的**!return x+y
mysum01(2, 3)
# 5(lambda x, y: x+y)(2, 4)
# 6
下面,我們來仔細看一下它的用法
帶 if/else
>>>( lambda x, y: x if x巢狀函式1
>>>( lambda x: ( lambda y: ( lambda z: x + y + z )( 1 ) )( 2 ) )( 3)遞迴函式6
>>> func = lambda n:1 if n == 0 else n * func(n-1)或者>>> func(5)
120
>>> f = lambda func, n: 1 if n == 0 else n * func( func, n - 1)從以上示例來看,lambda表示式和常規的函式相比,寫法比較怪異,可讀性相對較差。除了可以直接執行之外,好像並沒有其他較為突出的功能,為什麼在今天我們要介紹它呢?>>> f(f,4)
24
首先我們要知道lambda是乙個表示式,而不是乙個語句。正因為這個特點,我們可以在一些特殊的場景中去使用它。具體是什麼場景呢?接下來我們會介紹到幾個非常好用的內建函式。
map函式,它接收兩個引數,第乙個引數是乙個函式物件(當然也可以是乙個lambda表示式),第二個引數是乙個序列。
它可以實現怎樣的功能呢,我舉個例子你就明白了。
>>> map(lambda x: x*2, [1,2,3,4,5])可以很清楚地看到,它可以將後面序列中的每乙個元素做為引數傳入lambda中。[2, 4, 6, 8, 10]
當我們不使用 map 函式時,你也許會這樣子寫。
mylist=reduce函式,也是類似的。它的作用是先對序列中的第 1、2 個元素進行操作,得到的結果再與第三個資料用lambda函式運算,將其得到的結果再與第四個元素進行運算,以此類推下去直到後面沒有元素了。for i in [1,2,3,4,5]:
filter函式,和map函式相似。同樣也是接收兩個引數,乙個lambda表示式,乙個序列。它會遍歷後面序列中每乙個元素,並將其做為引數傳入lambda表示式中,當表示式返回 true,則元素會被保留下來,當表示式返回 false ,則元素會被丟棄。
下面這個例子,將過濾出乙個列表中小於0的元素。
>>>filter(lambda x: x < 0, range(-5, 5))
[-5, -4, -3, -2, -1]
reduce 邏輯演示
這邊舉個例子你也就明白了。
>>>reduce(lambda x,y: x+y, [1,2,3,4,5])它的運算過程分解一下是這樣的。15
1+2=3以上幾個函式,熟練的掌握它們的寫法,可以讓我們的**看起來更加的 pythonic ,在某一程度上**看起來更加的簡潔。3+3=6
6+4=10
10+5=15
如果你是新手呢,你需要注意的是,以上示例是在 python2.x 環境下演示的。而在 python3.x 中,卻有所不同,你可以自己嘗試一下。
這裡總結一下:
第一點,map和filter函式返回的都不再是乙個列表,而是乙個迭代器物件。這裡以map為例
>>> map_obj = map(lambda x: x*2, [1,2,3,4,5])第二點,reduce不可以直接呼叫,而是要先導入才能使用。>>> from collections.abc import
iterator
>>>isinstance(map_obj, iterator)
true
>>>next(map_obj)
2>>>list(map_obj)
[4, 6, 8, 10]
from functools import reduce注:**於----痴海
Python爬蟲之必備chardet庫
玩兒過爬蟲的朋友應該知道,在爬取不同的網頁時,返回結果會出現亂碼的情況。比如,在爬取某個中文網頁的時候,有的頁面使用gbk gb2312,有的使用utf8,如果你需要去爬一些頁面,知道網頁編碼很重要的。雖然html頁面有charset標籤,但是有些時候是不對的,那麼chardet就能幫我們大忙了。使...
python基礎 1 python基礎之必備知識
2 識別符號命名規範 3 資料型別 4 總結 小王沒上班幾天,老闆過來告訴小王把這份業務 熟悉下,納尼,全是26個英文本母,都沒有一點注釋,嘿嘿,注釋雖好,可不要貪杯喲!那麼在python中,分為單行注釋和多行注釋,單行注釋以 開頭,多行注釋使用兩個三引號包含起來,如下圖所示 小王平時喜歡幹啥呀 p...
python必備單詞
print 輸出 input 輸入 str 字串 utf 8 字串的一種成熟編碼 ord 獲取字串的整數表示形式 chr 把編碼轉換成對應字元 encode 編碼指定為 bytes len 檢視乙個合集裡包含多少個元素 float 浮點數 list 可更改的有序合集 tuple 不可修改的有序列表,...