Как создавать функции прямо в 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])