谁能解释一下这段代码中发生了什么?

时间:2018-05-28 13:50:26

标签: python lambda

任何人都可以解释一下此代码中发生的事情以及存储在doubler和tripler中的内容。

以下是代码:

def myfunc(n):
  return lambda i: i*n

doubler = myfunc(2)
tripler = myfunc(3)
val = 11
print("Doubled: " + str(doubler) + ". Tripled: " + str(tripler))

3 个答案:

答案 0 :(得分:2)

myfunc是一个创建匿名函数的函数(又名lambda

所以doubler是一个函数,可以使输入加倍。

当您打印语句时,您会获得函数的表示,而不是结果:

Doubled: <function myfunc.<locals>.<lambda> at 0x0000000003373268>. Tripled: <function myfunc.<locals>.<lambda> at 0x00000000033732F0>

您必须调用您的函数,并使用您刚刚定义的参数

print("Doubled: " + str(doubler(val)) + ". Tripled: " + str(tripler(val)))

现在打印:

Doubled: 22. Tripled: 33

答案 1 :(得分:0)

返回lambda i: i*n您返回的是函数而不是值。 您必须更改以下代码:

print("Doubled: " + str(doubler(val)) + ". Tripled: " + str(tripler(val))

答案 2 :(得分:0)

你的功能&#34; myfunc(n)&#34;将返回另一个(lambda)函数,您可以使用doubler(或trippler)调用它。

doubler(2) returns 4

变量doubler,trippler只保存一个函数的引用,所以str(doubler)没有多大意义,因为它显示了这个函数的字符串表示形式及其内存地址。