[python] Vyhodnocení jednoduchých výrazů
Petr Messner
petr.messner na gmail.com
Středa Srpen 22 10:20:46 CEST 2018
Ahoj,
teoreticky nejlepší přístup je vyrobit si parser, který ti ten výraz převede na AST strom, a ten strom pak “provést”, což je vlastně jen průchod do hloubky.
Ten parser si můžeš vyrobit sám implementací nějakého parser algoritmu - vzhledem k tomu, že vstup bude asi celkem malý a gramatika ne moc kompletní, tak je to celkem schůdná cesta. Nebo můžeš použit nějakou knihovnu pro tvorbu parserů (jsou i pro Python), no a nebo můžeš využít přímo parser Pythonu - modul ast. Rozdíl oproti eval() pak bude ten, že bude pod tvoji kontrolou, co to bude dělat, takže hodně snížíš bezpečností rizika.
Když trochu pogooglím, tak najdu:
https://gist.github.com/ircmaxell/1232629
https://stackoverflow.com/q/114586/196206
https://stackoverflow.com/q/594266/196206
https://gist.github.com/mgood/3276107
...a spousta dalšího
Petr Messner
22. 8. 2018 v 9:30, Petr Blahos <petrblahos na gmail.com>:
> Přátelé,
>
> doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
> výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>
> a pak udělám:
> result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
>
> Případně ještě knihovna.zkontroluj_vyraz(expr).
> Potřebuju tam opravdu jenom + - * / a závorky.
>
> Díky,
> Petr
> --
> http://www.blahos.com/
> http://traceability.cz/
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20180822/815eafc2/attachment.html>
Další informace o konferenci Python