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]