You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请解释这段Python代码的执行逻辑及doubler、tripler的存储内容

这段Python代码的执行过程与变量解析

先把原代码贴出来方便参考:

def myfunc(n):
    return lambda i: i*n
doubler = myfunc(2)
tripler = myfunc(3)
val = 11
print("Doubled: " + str(doubler) + ". Tripled: " + str(tripler))

执行过程拆解

咱们一步一步来看代码是怎么跑的:

  • 第一步:定义myfunc函数
    myfunc是一个高阶函数,它接收一个参数n,然后返回一个匿名的lambda函数。这个lambda函数的逻辑很简单——接收参数i,返回i * n的计算结果。这里核心是闭包特性:lambda函数会保留并访问外部函数myfunc中的n变量,哪怕myfunc已经执行完毕。

  • 第二步:初始化doubler
    当调用myfunc(2)时,myfunc的参数n被赋值为2,随后返回绑定了n=2的lambda函数。所以doubler本质上就是这个lambda函数,等价于手动定义doubler = lambda i: i*2。

  • 第三步:初始化tripler
    和doubler的逻辑完全一致,调用myfunc(3)时,n被设为3,返回的lambda函数绑定了这个值,所以tripler等价于lambda i: i*3。

  • 第四步:定义val与执行打印
    val = 11只是定义了一个变量,但这段代码里并没有实际使用它。print语句把doubler和tripler转成字符串输出,这时候你会看到类似<function myfunc.<locals>.<lambda> at 0x7fxxxx>的内容——这是因为直接打印函数对象时,Python会输出它的内存地址和类型信息,而不是函数的执行结果。如果要得到实际的翻倍/三倍值,应该调用函数,比如doubler(val)或者tripler(val)。

doubler和tripler的具体内容

  • doubler存储的是一个闭包lambda函数,它已经“记住”了外部的n=2。当你调用它(比如doubler(10)),它会执行10 * 2并返回结果20。
  • tripler存储的是绑定了n=3的闭包lambda函数,调用tripler(10)会返回30。

内容的提问来源于stack exchange,提问作者Ankit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:36:23