HOWTO · Python
在 Python 中的 Lambda 函式中傳遞多個引數
瞭解如何在 Python 中的 Lambda 函式中傳遞多個引數。
本頁內容
lambda 形式或 lambda 表示式是 Python 中的匿名函式。它們是可以使用 Python 中保留的 lambda 關鍵字建立的行內函數。
本文將討論 Python 中的 lambda 函式,並學習如何處理其中的多個引數。
Python 中的 Lambda 函式
一個 lambda 函式由三部分組成:lambda 關鍵字、引數或繫結變數以及函式體。函式體只能有一個 Python 表示式,因為這些函式是內聯的。
這些函式不僅可以立即呼叫,還可以像其他常規 Python 函式一樣使用。
Lambda 函式具有以下語法:
lambda < parameters comma seperated >: expression
請注意,函式體中的表示式應該返回一些值。如果表示式不返回任何值,則 lambda 函式的結果將是 None 值。
對於內聯呼叫,我們將 lambda 函式括在括號內,並將其旁邊的引數值放在括號內。
以下是此操作的語法:
(lambda < parameters comma seperated > : expression) ( < parameters comma seperated > )
為了理解這些 lambda 函式,讓我們建立一個將兩個數字相乘的 lambda 函式。正如我們所討論的,這些函式可以立即呼叫並用作常規 Python 函式,因此示例將包括 lambda 函式的兩個版本。
乘法示例參考以下程式碼:
# Regular function calls
def multiply(a, b):
return a * b
print(multiply(1, 2))
print(multiply(10, 5))
print(multiply(10.5, 9.3))
print(multiply(0.945, -5.645))
print(multiply(1000e9, 0), end="\n\n")
# Inline invocation
print((lambda a, b: a * b)(1.1, 1.2))
print((lambda a, b: a * b)(10, 5))
print((lambda a, b: a * b)(10.5, 9.3))
print((lambda a, b: a * b)(0.945, -5.645))
print((lambda a, b: a * b)(1000e9, 0))
輸出:
2
50
97.65
-5.334524999999999
0.0
1.32
50
97.65
-5.334524999999999
0.0
為了更精確,讓我們考慮另外三個示例,我們將從數字列表中過濾奇數值,計算列表元素的平方,以及計算列表元素的立方根。
第一個示例請參考以下 Python 程式碼:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def filter_odd(a):
return a % 2 != 0
print(list(filter(filter_odd, x)))
print(list(filter(filter_odd, y)))
print(list(filter(filter_odd, z)), end="\n\n")
# Inline invocation
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(x))
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(y))
print((lambda array: list(filter(lambda a: a % 2 != 0, array)))(z))
輸出:
[1, 3, 5, 7, 9]
[]
[9797, 97, 985, 75473, 2845, 6747]
[1, 3, 5, 7, 9]
[]
[9797, 97, 985, 75473, 2845, 6747]
有關第二個示例,請參閱以下 Python 程式碼片段:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def square(a):
return a ** 2
print(list(map(square, x)))
print(list(map(square, y)))
print(list(map(square, z)), end="\n\n")
# Inline invocation
print((lambda array: list(map(lambda a: a ** 2, array)))(x))
print((lambda array: list(map(lambda a: a ** 2, array)))(y))
print((lambda array: list(map(lambda a: a ** 2, array)))(z))
輸出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[484, 1936, 4356, 7744, 12100]
[6084, 95981209, 9409, 970225, 5696173729, 8094025, 5476, 99281296, 425104, 15376, 0, 45522009]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[484, 1936, 4356, 7744, 12100]
[6084, 95981209, 9409, 970225, 5696173729, 8094025, 5476, 99281296, 425104, 15376, 0, 45522009]
並且,請參閱以下第三個示例的 Python 程式碼片段:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [22, 44, 66, 88, 110]
z = [78, 9797, 97, 985, 75473, 2845, 74, 9964, 652, 124, 0, 6747]
# Regular function calls
def square(a):
return a ** (1 / 3)
print(list(map(square, x)))
print(list(map(square, y)))
print(list(map(square, z)), end="\n\n")
# Inline invocation
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(x))
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(y))
print((lambda array: list(map(lambda a: a ** (1 / 3), array)))(z))
輸出:
[1.0, 1.2599210498948732, 1.4422495703074083, 1.5874010519681994, 1.7099759466766968, 1.8171205928321397, 1.912931182772389, 2.0, 2.080083823051904, 2.154434690031884]
[2.802039330655387, 3.530348335326063, 4.04124002062219, 4.4479601811386305, 4.791419857062784]
[4.272658681697917, 21.397565740522946, 4.594700892207039, 9.949747895601458, 42.2601016892268, 14.169703309060843, 4.198336453808407, 21.518462597981888, 8.671266460286839, 4.986630952238645, 0.0, 18.896015508976504]
[1.0, 1.2599210498948732, 1.4422495703074083, 1.5874010519681994, 1.7099759466766968, 1.8171205928321397, 1.912931182772389, 2.0, 2.080083823051904, 2.154434690031884]
[2.802039330655387, 3.530348335326063, 4.04124002062219, 4.4479601811386305, 4.791419857062784]
[4.272658681697917, 21.397565740522946, 4.594700892207039, 9.949747895601458, 42.2601016892268, 14.169703309060843, 4.198336453808407, 21.518462597981888, 8.671266460286839, 4.986630952238645, 0.0, 18.896015508976504]
在 Lambda 函式中傳遞多個引數
要在 lambda 函式中傳遞多個引數,我們必須提及所有以逗號分隔的引數。讓我們通過一個例子來理解這一點。
我們將建立一個帶有三個引數的 lambda 函式;一個列表和兩個整數。lambda 函式將從每個列表元素中新增第一個整數並減去第二個整數。
為此,請參閱以下 Python 程式碼:
x1 = [1, 8, 27, 64, 125, 216, 343, 512]
x2 = 5
x3 = 6
y1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
y2 = 4
y3 = 1
z1 = [78, 9797, 97, 985, 75473, 2845, 74]
z2 = 99
z3 = 99
# Regular function calls
def modify(a, b, c):
return [x + b - c for x in a]
print(modify(x1, x2, x3))
print(modify(y1, y2, y3))
print(modify(z1, z2, z3), end="\n\n")
# Inline invocation
print((lambda a, b, c: [x + b - c for x in a])(x1, x2, x3))
print((lambda a, b, c: [x + b - c for x in a])(y1, y2, y3))
print((lambda a, b, c: [x + b - c for x in a])(z1, z2, z3))
輸出:
[0, 7, 26, 63, 124, 215, 342, 511]
[14, 25, 36, 47, 58, 69, 80, 91, 102]
[78, 9797, 97, 985, 75473, 2845, 74]
[0, 7, 26, 63, 124, 215, 342, 511]
[14, 25, 36, 47, 58, 69, 80, 91, 102]
[78, 9797, 97, 985, 75473, 2845, 74]