亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Python匿名函數(lambda函數)

發布時間:2020-08-25 05:38:20 來源:腳本之家 閱讀:177 作者:luckycyong 欄目:開發技術

匿名函數lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,意即不再使用def語句這樣標準的形式定義一個函數。這種語句的目的是由于性能的原因,在調用時繞過函數的棧分配。其語法是:

lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現。

下面舉例來說明lambda語句的使用方法(無參數)。

# 使用def定義函數的方法
def true():
  return True

#等價的lambda表達式
>>> lambda :True
<function <lambda> at 0x0000000001E42518>

# 保留lambda對象到變量中,以便隨時調用
>>> true = lambda :True
>>> true()
True

下面再舉一個帶參數的例子。

# 使用def定義的函數
def add( x, y ):
  return x + y

# 使用lambda的表達式
lambda x, y: x + y

# lambda也允許有默認值和使用變長參數
lambda x, y = 2: x + y
lambda *z: z

# 調用lambda函數
>>> a = lambda x, y: x + y
>>> a( 1, 3 )
4
>>> b = lambda x, y = 2: x + y
>>> b( 1 )
3
>>> b( 1, 3 )
4
>>> c = lambda *z: z
>>> c( 10, 'test')
(10, 'test')

但由于lambda表達式特殊的設計,在特定的場景中也帶來了一些不同的體驗。

lambda是一個表達式,不是一個語句 這就使它能夠出現在一些def不能出現的地方,比如,列表常量中。

lambda是單個的表達式,不是一個代碼塊 lambda的設計是為了滿足簡單函數的場景,僅能封裝有限的邏輯,有復雜邏輯的情況有def來處理,所以lambda的功能要比def小的多。

另外,lambda表達式是可以嵌套的

>>> action = (lambda x : (lambda y : x + y))
>>> a = action(10)
>>> a(5)
15

這就是一個用lambda實現的閉包,與普通閉包一樣,內嵌lambda表達式可以獲得上層lambda函數的變量。

匿名函數的使用

匿名函數通常被用作高階函數(higher-order function,參數為函數的函數)的參數。比如,幾個內置函數:filter(),map(),reduce()。下面我們分別看看這幾個函數的用法及達到相同效果的python另一種特征的用法

filter函數

>>> list = [1, 2, 3]
>>> result = filter(lambda x: x%2==0, list)
>>> result
[2]
>>> result = [x for x in list if x%2==0]
>>> result
[2]

map函數

>>> result = map(lambda x: x*2, list)
>>> result
[2, 4, 6]
>>> result = [x*2 for x in list]
>>> result
[2, 4, 6]

reduce函數

>>> result = reduce(lambda x, y: x+y,list)
>>> result
6
>>> result = sum(list)
>>> result
6

除reduce函數的替代用法比較特殊外,map和filter函數都可以使用列表推導式(list comprehension)代替。據說,當年lambda是一個Lisp程序員給python加的,而Guido是強烈反對的,他中意的是列表推導式。

跳轉表(jump table)

lambda的另一種用法是用來編寫跳轉表,也就是行為列表或字典,能按需執行特定的動作。

>>> key = "get"
>>> {"abc":(lambda : 2 + 2),"bcd" : (lambda : 3 + 3), "get" : (lambda : 4 + 4)}[key]()
8

這樣在字典中,每個lambda都留下了一個后續可以調用的函數,通過索引可以取出來,并調用。這就使字段可以成為更加通用的多路分支工具。

以上所述是小編給大家介紹的Python匿名函數(lambda函數)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民权县| 屏山县| 永福县| 贵溪市| 伊金霍洛旗| 泊头市| 建始县| 永定县| 洱源县| 庄河市| 东平县| 岫岩| 德保县| 凌云县| 封开县| 安平县| 潮州市| 潼南县| 商水县| 石台县| 紫金县| 万源市| 永城市| 宝清县| 台湾省| 资源县| 如皋市| 五河县| 安新县| 吴川市| 三河市| 威信县| 集安市| 宜君县| 芜湖县| 恩施市| 巫山县| 雅安市| 湄潭县| 北碚区| 湖北省|