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
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP