python3 lambda表示式與函式式程式設計

2021-08-14 06:26:56 字數 2347 閱讀 5775

簡單來說,程式設計中提到的 lambda 表示式,通常是在

需要乙個函式,但是又不想費神去命名乙個函式

的場合下使用,也就是指

匿名函式

。其一般有如下幾種使用方式:

1、lambda的一般形式是關鍵字lambda後面跟乙個或多個引數,緊跟乙個冒號,以後是乙個表示式。lambda是乙個表示式而不是乙個語句。它能夠出現在python語法不允許def出現的地方。作為表示式,lambda返回乙個值(即乙個新的函式)。lambda用來編寫簡單的函式,而def用來處理更強大的任務。例如:

f = lambda x,y,z : x+y+z  

print f(1,2,3)

g = lambda x,y=2,z=3 : x+y+z

print g(1,z=4,y=5)

結果:6

10

2、lambda表示式常用來編寫跳轉表(jump table),就是行為的列表或字典。例如:

l = [(lambda x: x**2),  

(lambda x: x**3),

(lambda x: x**4)]

print l[0](2),l[1](2),l[2](2)

d =

print d['f1'](),d['f2'](),d['f3']()

結果:4 8 16

5 6 8

3、lambda表示式可以巢狀使用,但是從可讀性的角度來說,應盡量避免使用巢狀的lambda表示式。

lambda函式又稱匿名函式,匿名函式就是沒有名字的函式,函式沒有名字也行?

當然可以啦。有

些函式如果只是臨時一用,而且它的業務邏輯也很簡單時,就沒必要非給它取個名字不可。lamdba函式的正確使用場景:

1、函式式程式設計

儘管python算不上是一門純函式式程式語言,但它本身提供了很多函式式程式設計的特性,python中,也有幾個定義好的全域性函式方便使用的,像

map、

reduce、filter、sorted這些函式都支援函式作為引數,lambda函式就可以應用在函式式程式設計中。如下:

from functools import reduce 

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]

print (list(filter(lambda x: x % 3 == 0, foo)))

#[18, 9, 24, 12, 27]

print (list(map(lambda x: x * 2 + 10, foo)))

#[14, 46, 28, 54, 44, 58, 26, 34, 64]

print (reduce(lambda x, y: x + y, foo))

#139

2、閉包

閉包本身是乙個晦澀難懂的概念,在這裡我們以簡單粗暴地理解為

閉包就是乙個定義在函式內部的函式

,閉包使得變數即使脫離了該函式的作用域範圍也依然能被訪問到。

lambda函式作為閉包的例子:

>>> def my_add(n):

... return lambda x:x+n>>> add_3 = my_add(3)

>>> add_3(7)

10

這裡lambda函式就是乙個閉包,在全域性作用域範圍中,add_3(7)可以正常執行且返回值為10,之所以返回10是因為在my_add區域性作用域中,變數n的值在閉包的作用使得它在全域性作用域也可以被訪問到。

換成常規函式也可以實現閉包,只不過是這種方式稍顯囉嗦,如下:

>>> def my_add(n):

... return x+n

...>>> add_5 = my_add(5)

>>> add_5(2)

7

不過不是任何情況lambda函式都要比常規函式更清晰明了,看這個例子:
f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]
這是返回某個集合的所有子集的lambda函式,相信你要看一會兒才能看明白。

python中有這樣一句話是explicit is better than implicit(明了勝於晦澀)。

若用lambda函式不能使**變得更清晰,就要考慮使用常規的方式來定義函式。

python3,lambda表示式(匿名函式)說明

lambda arg1 arg2,argn expression冒號 左邊arg1 argn是傳入引數,可以傳入多個值,也可以新增預設值,跟正常函式一樣 冒號 右邊是expression,引數的表示式。表示式 現的引數需要在 左邊中有定義。表示式只能是單行。計算a,b的和 1 def add a,b...

Python3 的lambda表示式

一般的屌絲函式是這樣定義的 def ds x return 2 x 1 而匿名函式是這樣的 lambda x 2 x 1 使用匿名函式的好處 1 可以使函式更加簡潔 2 無需考慮命名,不用為孩子起名字絞盡腦汁了哈哈哈哈哈 3 簡化 提高 的可讀性 利用lambda表示式和filter 求100以內3...

Python3中lambda表示式與函式式程式設計講解

簡單來說,程式設計中提到的 lambda 表示式,通常是在需要乙個函式,但是又不想費神去命名乙個函式的場合下使用,也就是指匿名函式。其一般有如下幾種使用方式 1 lambda的一般形式是關鍵字lambda後面跟乙個或多個引數,緊跟乙個冒號,以後是乙個表示式。lambda是乙個表示式而不是乙個語句。它...