Учитывая входной кортеж, цель состоит в том, чтобы создать словарь с некоторыми предопределенными ключами, например. в данном случае у нас есть лямбда add_header и используем распаковку внутри при вызове функции.
>>> z = (2,1)
>>> add_header = lambda x, y: {"EVEN": x, "ODD": y}
>>> add_header(*z)
{'EVEN': 2, 'ODD': 1}
Мой вопрос: есть ли способ, при котором распаковку не нужно выполнять при вызове функции add_header?
Например. Я могу изменить избегание лямбды и сделать это в обычной функции:
>>> def add_header(input):
... x, y = input
... 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(), но можно находиться внутри лямбда-функции.и при этом добиться того же результата {'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}
Во-первых, не используйте именованную лямбду. Вместо этого используйте def.
P.S. Я думаю, что есть аргумент, что лямбда-выражения слабы намеренно, чтобы не впихивать их в ситуации, в которых они не должны быть, как, может быть, в этом случае, но у меня нет ссылок на это или веских аргументов в пользу того, почему распаковка определенно должна невозможно внутри них. Я открыт для предложений.
FWIW, уродливое решение, которое я бы никогда не использовал:
lambda t: next({"EVEN": x, "ODD": y} for x,y in [t])