如何在 lambda 函数中解包变量?

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

给定一个输入元组,目标是生成一个带有一些预定义键的字典,例如在这种情况下,我们有一个

add_header
lambda,并在调用函数时使用内部的解包。

>>> z = (2,1)
>>> add_header = lambda x, y: {"EVEN": x, "ODD": y}
>>> add_header(*z)
{'EVEN': 2, 'ODD': 1}

我的问题是,有没有办法在调用

add_header
函数时不需要拆包?

例如我可以更改避免 lambda 并在正常函数中执行此操作:

>>> def add_header(z):
...     x, y = z
...     return {"EVEN": x, "ODD":y}
... 
>>> z = (2, 1)
>>> add_header(z)
{'EVEN': 2, 'ODD': 1}

或者我无法使用解包并使用元组的索引,即

z[0]
z[1]
:

>>> z = (2, 1)
>>> add_header = lambda z: {"EVEN": z[0], "ODD": z[1]}
>>> add_header(z)
{'EVEN': 2, 'ODD': 1}

但是有什么方法可以:

  • 使用 lambda
  • 不要在元组中明确使用索引
  • 调用
    *
    函数时不要使用
    add_header()
    解包,但可以在 lambda 函数内部。

并且在给定

{'EVEN': 2, 'ODD': 1}
输入的情况下仍能实现相同的
z = (2,1)
输出?


我知道这行不通,但是这样的东西存在吗?

z = (2,1)
add_header = lambda x, y from *x: {"EVEN": x, "ODD": y}
add_header(z)
python dictionary lambda iterable-unpacking
2个回答
2
投票

您可以尝试将

dict()
zip()
一起使用:

z = (2, 1)
add_header = lambda tpl: dict(zip(("EVEN", "ODD"), tpl))

print(add_header(z))

打印:

{'EVEN': 2, 'ODD': 1}

-1
投票

首先不要使用命名的 lambda 。请使用

def
来代替。

附注我认为有一个论点认为 lambda 故意很弱,以避免将它们硬塞到不应该的情况下,就像这个例子一样,但我没有对此的引用,也没有强有力的论据来解释为什么要专门解包 在它们内部不应该是可能的。我愿意接受建议。

© www.soinside.com 2019 - 2024. All rights reserved.