目錄:
一、lambda表示式
二、介紹兩個BIF:filter()和map()
三、課時21課後習題及答案
*********************
一、lambda表示式
*********************
Python允許使用lambda關鍵字來建立匿名函式。
先來定義一個普通的函式:
>>> def ds(x): return 2 * x + 1 >>> ds(5) 11
如果使用lambda語句來定義這個函式,就會變成這樣:
>>> lambda x : 2 * x + 1 <function <lambda> at 0x00000172968578C8>
Python的lambda表示式語法非常精簡,基本語法是在冒號(:)左邊放原函式的引數,可以有多個引數,用逗號(,)隔開即可;冒號右邊是返回值。在上面的例子中我們發現lambda語句實際上是返回一個函式物件,如果要對它進行使用,只需要進行簡單的操作即可:
>>> g=lambda x : 2 * x + 1 >>> g(5) 11
下面演示lambda表示式兩個引數的例子:
>>> def add(x,y): return x + y >>> add(3,4) 7 >>> g = lambda x , y :x + y >>> g(3,4) 7
lambda表示式的作用:
(1)Python寫一些執行指令碼時,使用lambda就可以省下定義函式過程,比如說我們只是需要寫個簡單的指令碼來管理伺服器時間,我們就不需要專門定義一個函式然後再寫呼叫,使用lambda就可以使得程式碼更加精簡。
(2)對於一些比較抽象並且整個程式執行下來只需要呼叫一兩次的函式,有時候給函式起個名字也是比較頭疼的問題,使用lambda就不需要考慮命名的問題了。
(3)簡化程式碼的可讀性,由於普通的屌絲函式閱讀經常要跳到開頭def定義部分,使用lambda函式可以省去這樣的步驟。
*******************************************
二、介紹兩個BIF:filter()和map()
*******************************************
1、filter()
我們研究的第一個內建函式是一個過濾器。我們每天會接觸到大量的資料,過濾器的作用就顯得非常重要了,通過過濾器,就可以儲存你所關注的資訊,把其它不感興趣的東西直接丟掉。那Python如何來實現過濾功能呢?先來看看Python自己的註釋:
>>> help(filter) Help on class filter in module builtins: class filter(object) | filter(function or None, iterable) --> filter object | | Return an iterator yielding those items of iterable for which function(item) | is true. If function is None, return the items that are true. | | Methods defined here: | | __getattribute__(self, name, /) | Return getattr(self, name). | | __iter__(self, /) | Implement iter(self). | | __next__(self, /) | Implement next(self). | | __reduce__(...) | Return state information for pickling. | | ---------------------------------------------------------------------- | Static methods defined here: | | __new__(*args, **kwargs) from builtins.type | Create and return a new object. See help(type) for accurate signature.
大概意思是:filter有兩個引數。第一個引數可以是一個函式也可以是None,如果是一個函式的話,則將第二個可迭代資料裡的每一個元素作為函式的引數進行計算,把返回True的值篩選出來;如果第一個引數為None,則直接將第二個引數中為True的值篩選出來。舉個例子:
>>> temp = filter(None,[1,0,False,True]) >>> list(temp) [1, True]
利用filter(),嘗試寫一個篩選奇數的過濾器:
>>> def odd(x): return x%2 >>> temp = filter(odd,range(10)) >>> list(temp) [1, 3, 5, 7, 9]
那現在學習了lambda函式後,完全可以把上述過程轉化為一行:
>>> list(filter(lambda x:x%2,range(10))) [1, 3, 5, 7, 9]
2.map()
map在這裡不是地圖的意思,在程式設計領域,map一般作“對映”來解釋。map()這個內建函式也有兩個引數,仍然的hi一個函式和一個可迭代序列,將序列的每一個元素作為函式的引數進行運算加工,直到可迭代序列每個元素都加工完畢,返回所有加工後的元素構成的新序列。
舉個例子:
>>> list(map(lambda x:x*2,range(10))) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
*******************************
三、課時21課後習題及答案
*******************************