Comment utiliser input () de Python avec une évaluation externe?
Je veux utiliser input () dans le code Python qui s'exécute dans le Wolfram Notebook.
Je crée donc une cellule d'évaluation externe en tapant ">" et en choisissant Python. Ensuite, je définis cette fonction:
def func():
x = input()
print(x)
Ensuite, j'essaye de l'appeler:
func()
ce qui fait fonctionner Mathematica pour toujours et ne pas évaluer.
Puis-je appeler input () de Python depuis le notebook?
2020-09-04 mise à jour. "input () lit à partir de l'entrée standard. Il n'y a pas d'entrée standard lors de l'utilisation d'un notebook."
oui, mais Jupyter le supporte cependant
Réponses
J'ai trouvé une astuce en utilisant TemplateExpression <* *>et SetDelayed dans Mathematica.
À titre d'exemple, j'essaie de définir une fonction python comme celle-ci, qui duplique la chaîne d'entrée:
def func():
return input()*2
le code Mathematica est:
pysession = StartExternalSession["Python"];
wlfunc[] := ExternalEvaluate[pysession, "<* InputString[] *> *2"]
ExternalEvaluate[pysession, "func = <* wlfunc *>"]
(Notez que la fonction python inputest équivalente à la fonction Mathematica InputString)
Maintenant, la fonction funcdéfinie dans la session python peut obtenir une entrée du FrontEnd de Mathematica:
ExternalEvaluate[pysession, "[func() for i in range(3)]"]
Je dois mentionner que cette astuce est assez limitée, par exemple,
ExternalEvaluate[pysession, "func() + func()"]
renverra a Failure, car la fonction est effectivement définie dans Mathematica plutôt qu'en python. Pour éviter cela, utilisez
ExternalEvaluate[pysession, "<* wlfunc[] *> + <* wlfunc[] *>"]