Python中Lambda函数作为参数传入时类型错误的问题解决
解决Lambda函数作为参数传入时的TypeError问题
错误原因
你第二个版本的核心问题是:传给mathematical函数的第三个参数是lambda函数本身(一个函数对象),而不是像第一个版本那样执行lambda后得到的整数结果。mathematical里尝试把整数和函数对象相加,自然触发TypeError: unsupported operand type(s) for +: 'int' and 'function'。
两种解决方法
方法1:传入lambda执行后的结果
直接在传入时调用这个lambda,把计算后的整数传进去,和你第一个版本的逻辑完全一致:
def multiply(a,b): return a*b def mathematical(X1, X2, X3): sum = X1 + X2 + X3 return sum mathematical_function= lambda X1, X2: mathematical(X1, X2, (lambda x,y: multiply(x,y))(X1,X2))*2 result = mathematical_function(3,4) print(result) # 输出:38
这里(lambda x,y: multiply(x,y))(X1,X2)就是直接执行lambda,得到X1*X2的结果。
方法2:修改mathematical函数以接收并执行函数参数
如果你的目标是真正理解“把函数作为参数传入”的概念,那应该让mathematical函数知道第三个参数是一个函数,需要调用它来获取值:
def multiply(a,b): return a*b # 修改mathematical,让X3是一个可执行的函数 def mathematical(X1, X2, X3): # 调用传入的函数X3,传入X1和X2作为参数 sum = X1 + X2 + X3(X1, X2) return sum mathematical_function= lambda X1, X2: mathematical(X1, X2, lambda x,y: multiply(x,y))*2 result = mathematical_function(3,4) print(result) # 同样输出38
这才是函数作为参数传递的典型用法——把逻辑封装成函数传进去,由被调用的函数决定什么时候执行它。
内容的提问来源于stack exchange,提问作者mchaudh4
相关产品推荐
相关产品推荐

