Python中的lambda的簡單介紹

2021-08-22 17:52:47 字數 1678 閱讀 3892

在學習python的過程中,lambda的語法經常出現,現在將它整理一下,以備日後檢視。   

舉個例子如下:

1 func=lambda x:x+1

2 print(func(1))

3 #2

4 print(func(2))

5 #3

6 7 #以上lambda等同於以下函式

8 def func(x):

9 return(x+1)

可以這樣認為,lambda作為乙個表示式,定義了乙個匿名函式,上例的**x為入口引數,x+1為函式體。在這裡lambda簡化了函式定義的書寫形式。是**更為簡潔,但是使用函式的定義方式更為直觀,易理解。

python中,也有幾個定義好的全域性函式方便使用的,filter, map, reduce。

1 from functools import reduce 

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

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

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

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

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

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

11 #139

上面例子中的map的作用,非常簡單清晰。但是,python是否非要使用lambda才能做到這樣的簡潔程度呢?在物件遍歷處理方面,其實python的for..in..if語法已經很強大,並且在易讀上勝過了lambda。   

比如上面map的例子,可以寫成:print ([x * 2 + 10 for x in foo]) 非常的簡潔,易懂。   

filter的例子可以寫成:print ([x for x in foo if x % 3 == 0]) 同樣也是比lambda的方式更容易理解。

lambda函式也叫匿名函式,即,函式沒有具體的名稱,而用def建立的方法是有名稱的

lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

lambda表示式是起到乙個函式速寫的作用。允許在**內嵌入乙個函式的定義。

lambda語句中,冒號前是引數,可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是乙個函式物件。

def hello_chinese(name):

print('你好:',name)

def hello_english(name):

print('hello:',name)

hello = lambda name:print('うわあ!',name)

hello('jie')

列印出:うわあ! jie

lambda函式的用途:

1、對於單行函式,使用lambda可以省去定義函式的過程,讓**更加精簡。

2、在非多次呼叫的函式的情況下,lambda表示式即用既得,提高效能

注意:如果for..in..if能做的,最好不要選擇lambda

Python中的lambda形式

python中的lambda語句被用來建立新的函式物件,並且在執行時返回它們。注意 1 下面的例子使用make repeater函式在執行時,通過lambda語句來建立新的函式物件,並且返回它。在這裡,lambda需要乙個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。2 注意...

python中的lambda函式

lambda函式也叫匿名函式,即,函式沒有具體的名稱。先來看乙個最簡單例子 deff x returnx 2printf 4 python中使用lambda的話,寫成這樣 g lambdax x 2printg 4 lambda表示式在很多程式語言都有對應的實現。比如c varg x x 2cons...

python中的lambda函式

今天學習python裡面的高階函式map f list 的時候看見這樣一行 print map lambda x x 3,range 6 我已經知道 map函式的首個引數是乙個函式,後面的乙個或者多個list or tuple作為第乙個引數 也就是那個函式 的引數,以map的方式遍歷執行,並返回乙個...