Powiedz, że mam funkcję fun(f, x, y)
gdzie x i y są liczbami, a f jest ciągiem określającym funkcję, taką jak "1/x ** 2 + y"
.Zapisywanie funkcji ewaluacyjnej w języku Python
Chciałbym użyć tej funkcji f
dużo, powiedzmy kilka milionów razy, a wartości x
i y
zmieniają się między każdym użyciem.
Dlatego wywołanie eval(f)
zajmuje znaczną ilość czasu, a nie tylko obliczenie wartości funkcji za każdym razem. (Około 50x, w moim mierzonym przypadku).
Czy istnieje sposób na zapisanie tej funkcji f
, tak żebym musiał tylko raz zadzwonić pod numer eval
?
PS. Proszę nie dyskutować o (nie) bezpieczeństwie używania eval
tutaj, jestem tego świadomy, ale ten kod nie będzie nigdzie, w którym strona trzecia go uruchomi, ani nie ma znaczenia dla mojego pytania.
Dlaczego funkcja ma być przechowywana jako ciąg? –
Zostanie wprowadzone przez użytkownika. – Torn
Inną opcją jest wstępne skompilowanie (https://docs.python.org/3/library/functions.html#compile) obiektu kodu, ale technika Jean-François jest prawie dwa razy szybsza. –