【函數世界】lambda 表達式,省時省力創建匿名函數

在這裏插入圖片描述


最近學習了Python中的 lambda 表達式,用來創建匿名函數,覺得這個小玩意也是有非常方便好用的地方。

那麼,今天來嘮嗑嘮嗑 lambda 表達式

也是自己學習的一個覆盤哈。

正如哲學的終極命題:我是誰?我從哪裏來?我到哪裏去?
在這裏插入圖片描述
我們今天就從 什麼是 lambda?爲什麼用 lambda?怎麼用lambda? 三個方面來認識下 lambda 表達式。
在這裏插入圖片描述

一、什麼是lambda

我們常說可以用 lambda 來創建匿名函數。沒錯,本質上 lambda 表達式就是一種非常省時省力創建函數的方法。

在某些情況下,運用 lambda 表達式創建簡單的方法函數,會比用 def 定義函數寫一個代碼塊要方便簡單許多。

也確實是這樣的,那麼我正式認識一下這位新夥伴。

lambda的語法結構比較簡單:

lambda arg1 ,arg2,.....argn : expression

翻譯成中文就是:

lambda 參數1,參數2,…參數n : 表達式

簡單舉個栗子,你就明白了哈。

比如我們要寫一個簡單的求兩個數相加和的函數

如果使用 def 來定義函數,那麼它是這樣的:

def add(a,b):
	s = a+b
	return s

x = add(5,6)
print(x)

如果我們使用 lambda 表達式

s = lambda a,b:a+b
x = s(5,6)
print(x)

是不是形式上看上去簡單了許多?
在這裏插入圖片描述

二、爲什麼用lambda

那麼具體來說使用 lambda 表達式有什麼好處?

總的歸納一下,那就是三大懶人福音:
在這裏插入圖片描述

  1. 可以精簡代碼。在寫一些執行腳本時候,針對那些使用的不太多的函數,就不需要用 def 定義了。(懶人福音1)
  2. 增強代碼可讀性。你在閱讀代碼的時候,就不用回到開頭看def如何定義函數的,可以通過 lambda 直接看。 (懶人福音2)
  3. 忘卻函數命名煩惱。嗯,沒錯,用 lambda 表達式,你可以不像 def 定義函數那樣去思考一個合適且讓人易懂的函數名稱。(懶人福音3)

在這裏插入圖片描述

三、怎麼用lambda

其實我們在第一部分介紹 lambda 表達式的時候已經介紹了其使用方法。

但是這裏我們要結合第二部分中提到的 lambda 的優勢好處,來舉例適合在哪些場合下使用 lambda。

1. filter() 與 lambda

通過filter()函數,讓你看看使用 lambda 會有多麼的方便

首先了解下 filter()函數

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象,如果要轉換爲列表,可以使用 list() 來轉換。

filter() 可以接收兩個參數,第一個爲函數,第二個爲序列,序列的每個元素作爲參數傳遞給函數進行判,然後返回 True 或
False,最後將返回 True 的元素放到新列表中。

舉個栗子:

篩選並生成出20以內的偶數的列表

def even(a):
	return a % 2 - 1
# 如果a是奇數,則a%2-1=0,返回False;
# 如果a是偶數,則a%2-1=-1,返回True;

even_number = filter(even, range(21))
print('使用 def 定義函數:')
print(list(even_number))

print('\n')

print('使用 lambda 表達式:')
print(list(filter(lambda a:a%2-1, range(21))))

運用程序:
在這裏插入圖片描述

  • 實現以上功能,如果 def 定義函數,你再怎麼也要先定義一個函數塊,然後寫主程序代碼;而使用 lambda 表達式,我們一行代碼就搞定了!(當然看着就相對冗長了點)
  • 就像我們所說的,使用 def 定義函數,你閱讀主程序代碼,你還得回頭看def裏面的內容;而使用 lambda,你可以直接一行閱讀過去就能懂了

——

2. Canvas 與 lambda

關於這個案例,如果你想知道整個的來龍去脈。請點擊下面鏈接跳轉【tkinter組件專欄】Canvas:發揮你橫溢才華的畫布

點擊目錄,快速定位到 【Canvas 自由塗鴉】部分內容
在這裏插入圖片描述
我們要在畫布上創建一個可以刪除所有元素的按鈕。

因爲這個功能也可能就用這麼一次,如果單獨去定義一個功能函數,也顯得稍微麻煩。

所以這種場合下,lambda 表達式就充分發揮它的作用了。

tk.Button(root, text="清除屏幕", command=(lambda a='all':w.delete(a))).pack(padx=10,pady=10)

一個小小的 lambda a='all':w.delete(a) ,我們就實現了清除屏幕功能。

是不是還是炒雞方便!

在這裏插入圖片描述

四、覆盤總結

  1. 語法結構:lambda arg1 ,arg2,.....argn : expression
  2. 使用 lambda 的好處:①可以簡化代碼;②增加代碼可讀性;③忘卻函數命名煩惱
  3. 使用場景舉例:①filter() 函數與 lambda;②Canvas 與 lambda

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章