我目前正在使用python 3.5和Ubuntu 16.04。我在python 2中有一个代码,我想将其用于python 3.5。该代码由lambda组成,传递给它的参数由3个元组组成。第一个元组是一个看起来像这样的数组:
array([[0,0,0,0],[0,0,0,0]],dtype=uint8)
第二个元组由一对数字组成,如下所示:
(34,678)
第三个元组是一个字符串,它包含指向特定文件的路径:
'/home/king/abcd.png'
因此我的论点苹果看起来像这样:
apple=(array([[0,0,0,0],[0,0,0,0]],dtype=uint8),(34,678),'/home/king/abcd.png')
现在,我知道python3中针对lambda的语法已更改,同时删除了元组参数拆包:
lambda(x, y) : x*x , y*y (python2)
lambda x_y : x_y[0] * x_y[0] , x_y[1] * x_y[1] (python3)
现在我的主要问题/问题是我想访问lambda内部的第一个元组的第一行,即访问:
[[0,0,0,0],[0,0,0,0]]
传递给lambda的参数是我们的参数apple。我当前的语法是:
lambda(x,y,z) : x[0] , y , z (pyhton2)
lambda x_y_z : ? , ? , ? (python3)
注意:我没有使用/尝试/想使用python 3.8
直接方法:
lambda x_y_z: (x_y_z[0][0], x_y_z[1], x_y_z[2])
您还可以嵌套lambda以模拟拆箱:
lambda x_y_z: (lambda x, y, z: x[0], y, z)(x_y_z)
这是否可读性尚待商,,但嵌套解压缩效果不佳。
注意,您仍然可以像以前一样通过预先使用def
和赋值语句来解压缩,这可能更易读:
def spam(x_y_z):
x, y, z = x_y_z
return x[0], y, z