请解释这段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
相关产品推荐
相关产品推荐

