任何人都可以解释一下此代码中发生的事情以及存储在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))
答案 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)没有多大意义,因为它显示了这个函数的字符串表示形式及其内存地址。