Python中的匿名函式是什麼?


Python中的匿名函式是指在定義時沒有名稱的函式。在Python中,使用lambda關鍵字定義匿名函式,而不是用於普通函式的def關鍵字。因此,lambda函式是匿名函式的另一種說法。

語法

以下是lambda函式的語法:

lambda [args] : expression

雖然lambda函式只能有一個表示式,但它可以有任意數量的引數。lambda函式也可以立即呼叫,並且編寫在一行程式碼中。

示例:呼叫lambda函式

lambda函式以關鍵字lambda開頭,以及引數'm'和'n'。冒號':'之後,方程式‘½ *m * n’的值將返回給呼叫者。為了使其可作為命名函式呼叫,整個lambda函式lambda ‘m,n : 1/2 * m * n’被賦給變數‘triangle’。如下所示,變數名被轉換為函式名,以便像其他函式一樣呼叫它。

# Finding the area of a triangle
triangle = lambda m,n : 1/2 * m * n
res=triangle(34,24)
print("Area of the triangle: ",res)

輸出

以下是上述程式碼的輸出:

Area of the triangle: 408.0 

替代方案

以下是定義匿名函式的另一種方法:

def triangle(m,n):
   return 1/2 * m * n
print(triangle(4,6))

輸出

以下是上述程式碼的輸出:

12.0

注意 - 表示式不需要總是返回值。如下例所示的lambda函式不返回任何值:

company = lambda name: print('EdTech', name)
company('Tutorials Point')

注意 − lambda函式中只能有一個表示式。很明顯,它不能替換其主體包含迴圈、條件語句等的函式。

將lambda函式與Python內建函式一起使用

使用Python的內建方法是一種簡單有效的方法來執行lambda函式的操作。由於這些函式可以接受lambda作為引數並立即呼叫,因此這是可能的。當需要一個短暫的無名函式時,使用lambda函式。

通常,我們將其用作Python中高階函式的引數(一個函式,它將其他函式作為引數)。lambda函式與filter()、map()等內建函式一起使用。

使用filter()函式

使用filter函式,可以選擇列表元素中的特定元素。任何迭代器,例如列表、集合、元組等,都可以用作序列。將選擇的元素將取決於預定義的約束。有兩個引數:

  • 指定過濾約束的函式

  • 一系列任何迭代器,如列表、元組等。

示例

在下面給出的示例中,顯示了在filter()函式中使用匿名函式‘lambda’。在第一行,定義了一個名為‘series’的數字列表。在這裡,filter()函式生成的過濾值在名為'result'的變數中宣告。使用一個lambda函式,該函式檢查列表中的每個專案,如果它大於‘29’,則返回true。然後,列印filter函式返回的結果:

series = [23,45,57,39,1,3,95,3,8,85]
result = filter (lambda m: m > 29, series)
print('All the numbers greater than 29 in the series are :',list(result))

輸出

以下是上述程式碼的輸出:

All the numbers greater than 29 in the series are : [45, 57, 39, 95, 85]

在map()函式中的使用

使用map()函式,可以對序列中的每個元素執行特定操作。與filter()函式類似,它需要兩個引數,即指定要對元素執行的操作的函式和一個或多個序列。

示例

以下是一個示例,用於顯示在map()函式中使用匿名函式‘lambda’。在這裡,我們定義了一個名為series的列表,其中包含許多專案。我們宣告'result'變數,它將儲存對映的值。一個lambda函式返回迭代評估的列表中每個數字的立方。然後列印map函式的結果。

# printing the cube of numbers given in the list
series = [23,5,1,7,45,9,38,65,3]
result = map (lambda m: m*m*m, series)
print('The cube of each element in the list are :',list(result))

輸出

以下是上述程式碼的輸出:

The cube of each element in the list are : [12167, 125, 1, 343, 91125, 729, 54872, 274625, 27]

在reduce()函式中的使用

map()函式類似,reduce函式用於對序列中的每個元素執行操作。但是,它的工作方式與map不同。reduce()函式在獲得輸出之前執行以下步驟:

  • 將指定的操作應用於序列的前兩個專案。

  • 儲存此結果。

  • 使用先前儲存的結果和序列的後續元素執行操作。

  • 繼續,直到沒有更多元素。

還有兩個額外的引數:

  • 指定要執行的操作的方法

  • 一系列任何迭代器,如列表、元組等。

注意 - reduce()函式是從名為functools的模組匯入的。此模組提供高階函式,例如reduce()、wraps()、cache()等。

示例

在下面的示例中,顯示了在reduce()函式中使用匿名函式‘lambda’。從functools模組匯入reduce()函式。在這裡,我們定義了一個名為'series'的列表,其中包含許多專案。我們宣告一個'sum'變數,它將儲存簡化後的值。給出一個lambda函式,它迭代每個列表項。然後它將給出這些數字求和的結果。

# printing the sum of numbers given in the list from functools
from functools import reduce 
series = [23,5,1,7,45,9,38,65,3]
sum = reduce (lambda m,n: m+n, series)
print('The total sum of all the elements in the list is :',sum)

輸出

以下是上述程式碼的輸出:

The total sum of all the elements in the list is : 196

更新於:2022年12月19日

20K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.