Python中如何不单独定义函数直接调用lambda 解析mydoubler类型问题
对应示例代码
def myfunc(n): return lambda a : a * n mydoubler = myfunc(2) print(mydoubler(11))
问题解答
为什么mydoubler的类型是<class 'function'>
Python里lambda关键字的作用就是创建匿名函数对象,本身就属于函数类型。
- 你定义的
myfunc函数的返回值,就是lambda生成的函数实例。调用myfunc(2)时,传入的参数2会通过闭包机制绑定到返回的lambda上,最终得到的是一个接收参数a、返回a * 2的可调用函数。 - 赋值操作只是把这个返回的函数对象引用存到了
mydoubler变量里,没有做任何类型转换。Python中函数本身是一等公民,支持作为返回值传递、赋值给变量,所以mydoubler的类型自然是function类型,这和你用def明确定义一个命名函数得到的对象类型完全一致。
不单独给lambda绑定命名变量的等效实现方式
不需要把lambda返回值赋值给独立命名变量,直接对myfunc()的返回值做即时链式调用即可,代码如下:
def myfunc(n): return lambda a : a * n # 直接连续传参调用,无需给lambda分配独立变量名 print(myfunc(2)(11))
执行逻辑很简单:第一组括号(2)是给外层myfunc传参,拿到绑定了n=2的匿名lambda函数后,紧跟的第二组括号(11)就是给这个lambda传参a=11,运行后直接得到结果22,和原代码输出完全一致,全程没有给lambda定义独立的命名引用。
内容的提问来源于stack exchange,提问作者Python track
相关产品推荐
相关产品推荐

