请解释lambda工作原理

时间:2011-12-30 23:37:40

标签: python lambda

  

可能重复:
  What is a lambda and what is an example implementation?

这是lambda的代码(来自Python的Byte):

def make_repeater(n):
    return lambda s: s * n

twice = make_repeater(2)

print twice('word')
print twice(5)

输出是这样的:

wordword
10

有人可以解释一下lambda如何在longform中工作吗?如何将word5传递给lambda函数中的s

感谢。

2 个答案:

答案 0 :(得分:4)

正如杰克所描述的那样,您的make_repeater会返回另一个n绑定到2的函数(这称为closure)。所以你的代码大致相当于:

twice = lambda s: s * 2

print twice('word')
print twice(5)

这又大致相当于:

def twice(s):
    return s * 2

print twice('word')
print twice(5)

这又大致相当于:

print 'word' * 2
print 5 * 2

所以你实际做的是:

  • 评估表达式'word' * 2,结果为'wordword'(字符串的乘法由Python定义为重复给定次数的字符串)
  • 评估表达式5 * 2,结果为10(这不应该让您感到惊讶)

lambda函数不关心其参数的类型并在运行时动态决定 哪个乘法方法正确,这一事实称为dynamic typing

答案 1 :(得分:1)

函数make_repeater返回另一个函数(lambda)。在您的示例中,lambda函数的名称为“两次”。 lambda有一个参数,“s”和一个“静态”值,“n” - 在创建lambda时定义“n”(在这种情况下,它被赋值为“2”)。调用lambda时确定“s”的值 - “word”或5. word * 2 =“wordword”和5 * 2 = 10.