【问题标题】:please explain lambda workings [duplicate]请解释 lambda 工作原理[重复]
【发布时间】:2011-12-31 07:53:30
【问题描述】:

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

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

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

twice = make_repeater(2)

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

输出是这样的:

wordword
10

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

谢谢。

【问题讨论】:

  • 很好地提出了一个比“可能重复”问题更好的问题,但第一个答案非常棒。
  • 我想我会因为递归到重复的问题而导致心理堆栈溢出错误......

标签: python lambda


【解决方案1】:

正如 Jake 已经描述的,您的 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2021-09-22
      • 2020-05-15
      • 2015-12-29
      相关资源
      最近更新 更多