如何将lambda从python2迁移到python3并处理在python3中删除的元组参数解包

问题描述 投票:0回答:1

我目前正在使用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

python python-3.x lambda ubuntu-16.04
1个回答
0
投票

直接方法:

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
© www.soinside.com 2019 - 2024. All rights reserved.