Как выполнить лямбда-функцию, не сохраняя ее в переменную?

У меня есть задание, при котором нужно, чтобы все коды были в одну строчку. Условие я приводить не буду, все сводится к довольно простому выражению:

answer = a + b + c + (a ** 2 + b ** 2 + c ** 2) ** 0.5

Входные данные (a, b, c) вводятся в консоль, каждое число с новой строки. Как вы могли догадаться, решить в одну строчку не так просто, т.к. переменные используются по два раза.

Тут я пришел к следующему, что надо бы использовать lambda-функции и установить в параметрах значения по умолчанию вводимые числа:

print(lambda a=int(input()), b=int(input()), c=int(input()): a + b + c + (a ** 2 + b ** 2 + c ** 2) ** 0.5)

Вывод понятно, не такой, какой надо - вернется ссылка на объект функции, т.к. по итогу ее и не вызвали. Вот в этом и заключается вопрос, как вызвать lambda-функцию, не сохраняя ее в отдельную переменную.

P.S. Про ";", "eval", "marshal", "exec" можете не писать, они запрещены, по условию задания. P.P.S. Входные данные: 3, 4, 12 -> 32.0


Ответы (3 шт):

Автор решения: Maksim Alekseev

Можно обернуть lambda функцию в скобки и вызвать ее через () на месте:

print((lambda a=int(input()), b=int(input()), c=int(input()): a + b + c + (a ** 2 + b ** 2 + c ** 2) ** 0.5)())

Ввод:

3
4
12

Вывод:

32.0
→ Ссылка
Автор решения: Fox Fox
print("Результат вычисления:", (lambda a, b, c: a + b + c + (a**2 + b**2 + c**2)**0.5)(*(float(input(f"Введите значение {x}: ")) for x in "abc")))
→ Ссылка
Автор решения: Alexey Trukhanov

Я понимаю, что вопрос не в решении задачи, а в применении лямбда-функции, однако позволю себе альтернативное решение с помощью сквозного присваивания.

print((a := int(input())) + (b := int(input())) + (c := int(input())) + (a ** 2 + b ** 2 + c ** 2) ** 0.5)
→ Ссылка