Как использовать Python input () с внешней оценкой?
Я хочу использовать input () в коде Python, который работает в Wolfram Notebook.
Итак, я создаю внешнюю ячейку оценки, набрав «>» и выбрав Python. Затем я определяю эту функцию:
def func():
x = input()
print(x)
Тогда я пытаюсь назвать это:
func()
что заставляет Mathematica работать вечно, а не оценивать.
Могу ли я вызвать Python input () из записной книжки?
2020-09-04 обновление. «input () читает из стандартного ввода. При использовании записной книжки нет стандартного ввода».
да, но Jupyter поддерживает его, хотя
Ответы
Я нашел уловку, используя TemplateExpression <* *>и SetDelayed в Mathematica.
В качестве примера я пытаюсь определить такую функцию python, которая дублирует входную строку:
def func():
return input()*2
код Mathematica:
pysession = StartExternalSession["Python"];
wlfunc[] := ExternalEvaluate[pysession, "<* InputString[] *> *2"]
ExternalEvaluate[pysession, "func = <* wlfunc *>"]
(Обратите внимание, что функция python inputэквивалентна функции Mathematica InputString)
Теперь функция, funcопределенная в сеансе python, может получать входные данные из FrontEnd системы Mathematica:
ExternalEvaluate[pysession, "[func() for i in range(3)]"]
Я должен отметить, что этот трюк довольно ограничен, например,
ExternalEvaluate[pysession, "func() + func()"]
вернет a Failure, потому что функция фактически определена в Mathematica, а не в python. Чтобы этого избежать, используйте
ExternalEvaluate[pysession, "<* wlfunc[] *> + <* wlfunc[] *>"]