Python 入門之經典函式例項(二)

Rich Dad發表於2020-09-30

時間煮雨
@R星校長

2關:lambda 函式 - 匿名函式的使用

在 Python 程式設計中我們除了可以用def語句來定義函式之外,還可以使用lambda來定義。我們用def語句來定義函式時需要指定函式名字,而使用lambda來定義函式時則不需要。lambda函式是 Python 中一個非常獨特的函式型別。

lambda函式又稱匿名函式,匿名函式顧名思義就是沒有名字的函式。可能我們現在還無法接受,函式沒有名字怎麼能行?但實際上是可以的。當我們在程式設計過程中只是臨時使用某些函式,而且這些函式的邏輯功能也很簡單時,就沒有必要非給這些函式取個名字不可。

這就類似於電影裡面都會有很多群眾演員,他們每個人所佔的戲份很少,只是起臨時演出的作用,所以一般沒有必要給臨時演員起一個電影名字,統一稱為群演就行。

匿名函式不需要return來返回值,lambda函式表示式本身的計算結果就是返回值。例如,我們可以用lambda函式定義一個加法,計算兩個整數相加:

f = lambda x,y:x+y
print(f(1,2))

運算結果:

3

xy是函式的兩個引數,:後面的表示式x+y表明函式的功能就是計算兩個數的和。在這裡我們並沒有給函式取名字,而是直接將匿名函式賦給變數f。然後給f傳入引數(1,2),就相當於給匿名函式傳入引數,得到返回結果3

儘管 Python 算不上是一門純函數語言程式設計語言,但它本身提供了很多函數語言程式設計的特性。像mapreducefiltersorted這些函式都支援函式作為引數,lambda函式也可以應用在函數語言程式設計中。例如,現在有一個整數列表,要求按照列表中元素的絕對值從小到大排列。我們可以先採取普通def函式解決這個問題:

# 給出一個包含正數和負數的列表
list1 = [2,3,-5,0,-4,-8,-1]
# 定義一個函式,返回輸入值的絕對值
def f(x):
    return abs(x)
# 利用sorted函式對列表中的元素根據絕對值的大小升序排序
list2=sorted(list1, key=f)
# 輸出新列表
print(list2)

我們也可以採取lambda函式更加簡便地實現這個目標:

# 給出一個包含正數和負數的列表
list1 = [2,3,-5,0,-4,-8,-1]
# 利用sorted函式對列表中的元素根據絕對值的大小升序排序
list2=sorted(list1, key=lambda x: abs(x))
# 輸出新列表
print(list2)

由這個例子可以看出,lambda函式會使部分函數語言程式設計更加簡便與快捷。lambda函式能起到速寫函式的作用,允許在使用的程式碼內嵌入一個函式的定義。在僅需要嵌入一小段可執行程式碼的情況下,就可以帶來更簡潔的程式碼結構。

# coding=utf-8

# 請在此新增程式碼,使用lambda來建立匿名函式,能夠判斷輸入的兩個數值的大小
########## Begin ##########

MAXIMUM = lambda x, y : max(x, y)
MINIMUM = lambda x, y : min(x, y)

########## End ##########

# 輸入兩個正整數
a = int(input())
b = int(input())

# 輸出較大的值和較小的值
print('較大的值是:%d' % MAXIMUM(a,b))
print('較小的值是:%d' % MINIMUM(a,b))

測試輸入:

5
12
預期輸出:

較大的值是:12
較小的值是:5
測試輸入:

7
3
預期輸出:

較大的值是:7
較小的值是:3
測試輸入:

120
89
預期輸出:

較大的值是:120
較小的值是:89
測試輸入:

13
110
預期輸出:

較大的值是:110
較小的值是:13

你可以忘掉失敗,但不能忘掉教訓;你可以忘掉昨天,但不能忘記歷史;你可以忘掉苦難,但不能忘卻艱辛;你可以忘掉傷疤,但不能忘卻恥辱。

在這裡插入圖片描述

相關文章