Lambda 表達(dá)式
匿名函數(shù)的定義
在 Python 里有兩類函數(shù):
- 第一類:用
def
關(guān)鍵詞定義的正規(guī)函數(shù) - 第二類:用
lambda
關(guān)鍵詞定義的匿名函數(shù)
Python 使用 lambda
關(guān)鍵詞來創(chuàng)建匿名函數(shù)惠呼,而非def
關(guān)鍵詞唧龄,它沒有函數(shù)名祠够,其語法結(jié)構(gòu)如下:
lambda argument_list: expression
-
lambda
- 定義匿名函數(shù)的關(guān)鍵詞冗尤。 -
argument_list
- 函數(shù)參數(shù)旋炒,它們可以是位置參數(shù)掌测、默認(rèn)參數(shù)乖阵、關(guān)鍵字參數(shù),和正規(guī)函數(shù)里的參數(shù)類型一樣惭笑。 -
:
- 冒號侣姆,在函數(shù)參數(shù)和表達(dá)式中間要加個(gè)冒號。 -
expression
- 只是一個(gè)表達(dá)式沉噩,輸入函數(shù)參數(shù)捺宗,輸出一些值。
注意:
-
expression
中沒有 return 語句川蒙,因?yàn)?lambda 不需要它來返回蚜厉,表達(dá)式本身結(jié)果就是返回值。 - 匿名函數(shù)擁有自己的命名空間畜眨,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)昼牛。
【例子】
def sqr(x):
return x ** 2
print(sqr)
# <function sqr at 0x000000BABD3A4400>
y = [sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
lbd_sqr = lambda x: x ** 2
print(lbd_sqr)
# <function <lambda> at 0x000000BABB6AC1E0>
y = [lbd_sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
sumary = lambda arg1, arg2: arg1 + arg2
print(sumary(10, 20)) # 30
func = lambda *args: sum(args)
print(func(1, 2, 3, 4, 5)) # 15
這段代碼展示了使用lambda
表達(dá)式(匿名函數(shù))的幾個(gè)示例术瓮。以下逐行解析代碼:
def sqr(x):
return x ** 2
print(sqr)
# <function sqr at 0x000000BABD3A4400>
定義了一個(gè)名為sqr
的函數(shù),用于計(jì)算一個(gè)數(shù)的平方贰健。打印sqr
函數(shù)會輸出函數(shù)的描述信息斤斧。
y = [sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
使用sqr
函數(shù)和列表推導(dǎo)式生成一個(gè)包含0到9的數(shù)的平方的列表。
lbd_sqr = lambda x: x ** 2
print(lbd_sqr)
# <function <lambda> at 0x000000BABB6AC1E0>
使用lambda
表達(dá)式創(chuàng)建了一個(gè)匿名函數(shù)霎烙,并將其賦值給變量lbd_sqr
。打印lbd_sqr
會輸出函數(shù)的描述信息蕊连。
y = [lbd_sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
使用lbd_sqr
的匿名函數(shù)和列表推導(dǎo)式生成一個(gè)包含0到9的數(shù)的平方的列表悬垃。
sumary = lambda arg1, arg2: arg1 + arg2
print(sumary(10, 20)) # 30
創(chuàng)建了一個(gè)接收兩個(gè)參數(shù)并返回它們之和的匿名函數(shù)sumary
。調(diào)用sumary(10, 20)
將返回結(jié)果30
甘苍。
func = lambda *args: sum(args)
print(func(1, 2, 3, 4, 5)) # 15
創(chuàng)建了一個(gè)接收可變數(shù)量參數(shù)并返回它們的和的匿名函數(shù)func
尝蠕。調(diào)用func(1, 2, 3, 4, 5)
將返回結(jié)果15
。
lambda
表達(dá)式是一種簡潔的函數(shù)定義方式载庭,在某些情況下可以替代常規(guī)的函數(shù)定義看彼。它通常用于創(chuàng)建簡單的、一次性的函數(shù)囚聚。在這些示例中靖榕,lambda
表達(dá)式被用于定義平方函數(shù)和求和函數(shù),并且通過列表推導(dǎo)式可以方便地應(yīng)用到一系列輸入上顽铸。