Как выполнить лямбда-функцию, не сохраняя ее в переменную?
У меня есть задание, при котором нужно, чтобы все коды были в одну строчку. Условие я приводить не буду, все сводится к довольно простому выражению:
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 шт):
Можно обернуть 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
print("Результат вычисления:", (lambda a, b, c: a + b + c + (a**2 + b**2 + c**2)**0.5)(*(float(input(f"Введите значение {x}: ")) for x in "abc")))
Я понимаю, что вопрос не в решении задачи, а в применении лямбда-функции, однако позволю себе альтернативное решение с помощью сквозного присваивания.
print((a := int(input())) + (b := int(input())) + (c := int(input())) + (a ** 2 + b ** 2 + c ** 2) ** 0.5)