Мой код выводит ссылку на функцию, а мне нужно её значение

print(lambda x = int(input()): x * x + x)

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


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

Автор решения: CrazyElf

Лямбда описывает функцию. После этого её ещё нужно вызвать, то есть написать скобки после неё. И чтобы было понятно, к чему относятся эти скобки, придётся и всю лямбду тоже в скобки взять:

print((lambda x = int(input()): x * x + x)())

P.S. Если очень хочется, то можно и через ; написать несколько строк кода в одной строке. Но так делать очень не рекомендуется по причинам не очень хорошей читаемости такого кода:

x = int(input()); print(x * x + x)

Впрочем, код с лямбдой тоже не так, чтобы очень читаемый. Я бы описание лямбды и её вызов делал на отдельных строках.

→ Ссылка
Автор решения: Иван Долгий

Не уверен, что под одной строкой ты имел именно это, но предложу такой вариант:

f = lambda x: x * x + x; print(f(int(input())))

Точка с запятой позволяет записывать выражения в одну строку, как ты и просишь.

Про lambda здесь написано достаточно подробно.

→ Ссылка
Автор решения: Vladimir Bogdanov

Представленные варианты ответов работают только если вводить одно число. Что если нужно обработать одновременный ввод нескольких чисел? @Amgarak задал справедливый вопрос.

Вариант вычислений для ввода нескольких чисел через пробел (одно число тоже отрабатывает) на основе генератора. На выходе - список вычисленных значений. Если заменить квадратные скобки на круглые, то получим полный генератор, который будет возвращать по одному числу.

print([x * x + x for x in (int(x) for x in input().split() if x.isdigit())])

P.S. Код отфильтровывает "мусорный" ввод. Все что не является числом, отбрасывается.

Более продвинутый вариант. Позволяет обрабатывать числа со знаком и float.

import re

print(
    [
        x * x + x
        for x in (int(x[1]) for x in re.finditer(r'([+-]?\d+)\.?\d*', input()))
    ]
)
→ Ссылка