如果匿名,什么是python lambda的调用?

时间:2014-11-11 19:33:33

标签: python lambda

我有lambda_expr :: =" lambda" [parameter_list]:表达式

并且您应该能够在不将其指定给名称的情况下执行此操作。那么什么构成了对lambda函数的调用。换句话说,如果你想将它用作内联函数,是什么让它做它应该做的事情?

2 个答案:

答案 0 :(得分:7)

lambda表达式返回一个function对象,因此您可以使用()调用它与任何其他函数相同。

>>> (lambda x : x + 3)(5)
8

更多"普通" -looking函数调用以相同的方式工作,除了函数对象是通过名称引用,而不是直接引用。下面演示了完成同一事情的三种不同方法:调用一个返回其参数值的函数加上三个。

def foo_by_statement(x):
    return x + 3

foo_by_expression = lambda x: x + 3

print foo_by_statement(2)
print foo_by_expression(2)
print (lambda x: x + 3)(2)

第一种是使用def语句将函数对象绑定到名称的传统方法。第二个是等效绑定,使用直接赋值将名称绑定到lambda表达式的结果。第三个是再次直接调用lambda表达式的返回值,而不首先将其绑定到名称。

通常,您实际上从未编写过这样的代码。 lambda表达式对于生成仅作为高阶函数的参数需要的函数对象最有用。您不必定义函数并将其绑定到您永远不会再使用的名称,而只需创建值并立即将其作为参数传递。例如:

plus_three = map(lambda x: x+3, [1,2,3])

答案 1 :(得分:2)

定义函数时,python会创建一个函数对象并将其赋值给一个名称。定义lambda时,python会创建一个函数对象,但不会将其指定给名称。这在几种情况下很有用,但一个常见的用例是当你想进行一个小的转换,但不想打扰编写常规函数(并且必须决定命名它)。假设我想要掌握一些数字的力量,我可以

>>> for num in map(lambda i,j: i**j, range(10), range(10)):
...     print num
... 
1
1
4
27
256
3125
46656
823543
16777216
387420489

这里,map接受一个函数并用一系列参数调用它。