给定一个输入元组,目标是生成一个带有一些预定义键的字典,例如在这种情况下,我们有一个
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}
但是有什么方法可以:
*
函数时不要使用 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)
您可以尝试将
dict()
与 zip()
一起使用:
z = (2, 1)
add_header = lambda tpl: dict(zip(("EVEN", "ODD"), tpl))
print(add_header(z))
打印:
{'EVEN': 2, 'ODD': 1}
首先不要使用命名的 lambda 。请使用
def
来代替。
附注我认为有一个论点认为 lambda 故意很弱,以避免将它们硬塞到不应该的情况下,就像这个例子一样,但我没有对此的引用,也没有强有力的论据来解释为什么要专门解包 在它们内部不应该是可能的。我愿意接受建议。