Как создавать функции прямо в eval (или exec)

Представим такую ситуацию что у нас есть программа по типу такой:

while True:
    eval(input("> "))

И человек вводит def foo():
Как мне при этом выполнить это без SyntaxError?

И при этом чтобы пользователь смог потом выполнить:

foo()

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

Автор решения: Ykropchick
eval(input(f”{foo()} >20 ”))

Можно попробовать лямбду функцию:

x = eval(input(" lambda x : x > 10"))

Потом где-то в коде использовать так: x(19)

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

Можно сварганить что-нибудь по типу самого питоновсого интерпретатора, который в интерактивном режиме в таком случае ждёт пустой строки, и только потом исполняет код.

while True:
    code = [input(">>> ")]
    if code[-1].rstrip().endswith(":"):
        while code[-1]:
            code.append(input("... "))
    exec("\n".join(code))

Или вперемешку с eval, если именно он вам так важен.

while True:
    code = [input(">>> ")]
    if code[-1].rstrip().endswith(":"):
        while code[-1]:
            code.append(input("... "))
        exec("\n".join(code))
    else:
        eval(code[-1])
→ Ссылка