类型错误:<lambda>() 缺少 1 个必需的位置参数:'w'

Posted

技术标签:

【中文标题】类型错误:<lambda>() 缺少 1 个必需的位置参数:\'w\'【英文标题】:TypeError: <lambda>() missing 1 required positional argument: 'w'类型错误:<lambda>() 缺少 1 个必需的位置参数:'w' 【发布时间】:2018-09-12 14:03:16 【问题描述】:

代码在这里

return self.activator(reduce(lambda a, b: a+b, map(lambda x, w: x*w, zip(input_vec, self.weights)), 0.0) + self.bias)

python2.7版本的代码如lambda (x, w)

但是现在 Tuple 参数解包被移除了 所以我不知道如何计算:(

【问题讨论】:

如果我没听错的话,你会看到 map 需要一个只有一个元素的函数。如果您映射元组列表,则可以使用索引获取值。 x = (13, 37) 打印(x[0], x[1]) emmmmm 看不懂你的意思。w的参数还是不够 @yizhui liu 你不应该使用 x 和 y 作为参数,而只能在函数体中使用一个参数和索引。我用代码回答了这个问题。希望有帮助。 Look here 请澄清:我认为您的意思是您使用的是 Python 3,并且由于删除了元组解包,您不能再将输入为元组的 lambda fn 声明为 lambda (x, w) 并自动获取其输入 arg 解压缩为 x,w。对吗? 【参考方案1】:

制作一个小的运行示例来显示问题是一件好事。在您的情况下,事实并非如此,因为我们缺少一些变量。就像我在另一条评论中所说的那样,您映射的列表是由元组组成的。就像您已经知道的那样,您不能再解包元组,但是您可以像在数组上使用索引一样使用索引。一个简单的工作示例:

val = reduce(lambda a, b: a+b, map(lambda t: t[0]*t[1], zip([10, 20, 30], [0.1, 0.3, 0.7])), 0.0)
print(val)

如您所见,传递给 map 函数的 lambda 函数现在只有一个参数。我称它为 t 是为了表明这是一个元组,如果你愿意,你可以称它为 x。在函数体中,我使用索引来获取元组的第一个和第二个元素。如果您运行此代码,您会发现它有效。所以下一步就是让你的代码适应它:

return self.activator(reduce(lambda a, b: a+b, map(lambda t: t[0]*t[1], zip(input_vec, self.weights)), 0.0) + self.bias)

这应该可以解决问题。

【讨论】:

【参考方案2】:

你不能再拆包了。但是,您可以直接采用元组,并在公式中使用索引:

map(lambda t: t[0]*t[1], zip(input_vec, self.weights))

使用maplambda 没什么兴趣,生成器理解等效:

(x*w for x,w in zip(input_vec, self.weights))    

(和解包工作)

需要对外部lambda 甚至reduce 重复相同的构造,这可以通过执行元素求和的sum 完全消除:

return self.activator(sum(x*w for x,w in zip(input_vec, self.weights)) + self.bias)

没有更多的 lambda,更短更清晰

【讨论】:

以上是关于类型错误:<lambda>() 缺少 1 个必需的位置参数:'w'的主要内容,如果未能解决你的问题,请参考以下文章

未指定 lambda 函数的返回类型时的段错误

lambda 表达式中的错误返回类型:

从 web3py 发送原始交易:TypeError: <lambda>() 缺少 4 个必需的位置参数:'hash'、'r'、's' 和 'v'

通用 lambda 的熟悉模板语法

如果我的模板类型首先作为 lambda 参数出现,MSVC 会引发一个奇怪的错误

类型“订阅”缺少类型“可观察<StringMap<any>>”中的以下属性