python踩坑记
map和zip
今天在跑感知器[1]Demo的时候
老报错:lambda() missing 1 required positional argument: ‘w’
从菜鸟教程里可以搜到Python中map函数[2]的用法,特别提到map函数在python2和python3中的区别
以及zip函数[3]的用法
笔者的Python是3.6.5,因此需要手动将map函数返回的迭代器转为list以及将zip函数返回的对象转为list。
涉及到的代码如下:
// 第一部分
return self.activator(
reduce(lambda a, b: a + b,
list(map(lambda x, w: x * w,
list(zip(input_vec, self.weights))))) + self.bias)
// 第二部分
self.weights = list(map(
lambda x, w: w + rate * delta * x,
list(zip(input_vec, self.weights))))
转为list之后,发现还是报错,后来搜了一下得到两位好心人的完美答案[4]
lambda表达式以元组作为参数,在python2和python3中写法是有区别的:
python2:
lambda (x, w) : x * w
python3
lambda x : x[0] * x[1]
因此,最终的代码改为:
// 第一部分
return self.activator(
reduce(lambda a, b: a + b,
list(map(lambda x: x[0] * x[1],
list(zip(input_vec, self.weights))))) + self.bias)
// 第二部分
self.weights = list(map(
lambda x: x[1] + rate * delta * x[0],
list(zip(input_vec, self.weights))))
然后就成功运行啦!
[1]:https://www.zybuluo.com/hanbingtao/note/433855
[2]:https://www.runoob.com/python/python-func-map.html
[3]:https://www.runoob.com/python/python-func-zip.html
[4]:https://zhidao.baidu.com/question/749852507853975452.html