課時21:函式:lambda表示式

那是個好男孩發表於2018-08-14

目錄:

  一、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課後習題及答案

*******************************

 

相關文章