在 Python 中的 Lambda 函式中傳遞多個引數

Vaibhav Vaibhav 2023年1月30日
  1. Python 中的 Lambda 函式
  2. 在 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]
作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相關文章 - Python Function

相關文章 - Python Lambda Function