[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