Dites que j'ai une fonction fun(f, x, y)
où x et y sont des nombres et f est une chaîne spécifiant une fonction telle que "1/x ** 2 + y"
.Python sauvegardant une fonction eval
Je souhaite utiliser cette fonction f
beaucoup, disons quelques millions de fois, et les valeurs de x
et y
changent entre chaque utilisation.
Par conséquent appeler eval(f)
prend beaucoup de temps au lieu de simplement calculer la valeur de la fonction à chaque fois. (Environ 50x, dans mon cas mesuré.)
Y at-il un moyen d'enregistrer cette fonction f
de sorte que je n'aurais besoin d'appeler eval
qu'une seule fois?
PS. S'il vous plaît ne pas discuter de la (non) sécurité de l'utilisation eval
ici, je suis au courant, mais ce code ne va nulle part où un tiers l'exécutera, ni n'est pertinent à ma question.
Pourquoi avez-vous besoin que la fonction soit stockée sous forme de chaîne? –
Il sera entré par l'utilisateur. – Torn
Une autre option est de pré-compiler (https://docs.python.org/3/library/functions.html#compile) votre expression dans un objet de code, mais la technique de Jean-François est presque deux fois plus rapide. –