在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 匿名函數(shù)
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進程、線程和協(xié)程
讀寫二進制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

匿名函數(shù)

在 Python 中,我們使用 def 語句來定義函數(shù),比如:

def double(x):
    return 2 * x

除了用上面的方式定義函數(shù),Python 還提供了一個關(guān)鍵字 lambda,讓我們可以創(chuàng)建一個匿名函數(shù),也就是沒有名稱的函數(shù)。它的形式如下:

lambda 參數(shù): 表達式

關(guān)鍵字 lambda 說明它是一個匿名函數(shù),冒號 : 前面的變量是該匿名函數(shù)的參數(shù),冒號后面是函數(shù)的返回值,注意這里不需使用 return 關(guān)鍵字。

我們將上面的 double 函數(shù)改寫成一個匿名函數(shù),如下:

lambda x: 2 * x

那怎么調(diào)用匿名函數(shù)呢?可以直接這樣使用:

>>> (lambda x: 2 * x)(8)
16

由于匿名函數(shù)本質(zhì)上是一個函數(shù)對象,也可以將其賦值給另一個變量,再由該變量來調(diào)用函數(shù),如下:

>>> f = lambda x: 2 * x   # 將匿名函數(shù)賦給變量 f  
>>> f
<function <lambda> at 0x7f835a696578>
>>> f(8)
16

使用場景

lambda 函數(shù)一般適用于創(chuàng)建一些臨時性的,小巧的函數(shù)。比如上面的 double 函數(shù),我們當(dāng)然可以使用 def 來定義,但使用 lambda 來創(chuàng)建會顯得很簡潔,尤其是在高階函數(shù)的使用中。

看一個例子:

def func(g, arr):
    return [g(x) for x in arr]

現(xiàn)在給一個列表 [1, 2, 3, 4],利用上面的函數(shù),對列表中的元素加 1,返回一個新的列表,你可能這樣用:

def add_one(x):
    return x + 1

arr = func(add_one, [1, 2, 3, 4])

這樣做沒什么錯,可是 add_one 這個函數(shù)太簡單了,使用 def 定義未免有點小題大作,我們改用 lambda

arr = func(lambda x: x + 1, [1, 2, 3, 4])

是不是很簡潔、易懂?

小結(jié)

  • 匿名函數(shù)本質(zhì)上是一個函數(shù),沒有函數(shù)名稱,因此使用匿名函數(shù)不用擔(dān)心函數(shù)名沖突;
  • 匿名函數(shù)一般適用于創(chuàng)建一些臨時性的,小巧的函數(shù);
上一篇:文件和目錄下一篇:字典