Es gibt nichts Gemeinsames zwischen Python eval
und sympy evalf
(letzteres ist für den numerischen Wert von sympy Ausdrucksbäume zu berechnen und es hat nichts mit Parsing zu tun, während eval
dreht sich alles um einen String Parsen und Auswerten als wenn es Code ist).
Auf der anderen Seite ist sympify
genauso gefährlich wie eval
, weil es tatsächlich eval
verwendet.
Es gibt zwei grundlegende Modi, in denen sympify
verwendet wird, und wahrscheinlich ist es eine schlechte Idee, dass sie in der gleichen Funktion gemischt wurden:
sympify(some_object)
zurückkehren würde eine Darstellung des Objekts besser geeignet für den Einsatz in ein CAS, wie int(1)
in sympy.Integer(1)
sympify("some_text")
verwandeln würde den Text fast direkt über eval
(Suche nach dem Import von sympy.parsing
inanalysiertund folge ihm). Es ist sicherer, da es einige Einschränkungen gibt, aber es ist nicht sicher.
Es gibt keine Vorschläge, 'evalf' anstelle von' eval' zu verwenden, da sie nichts gemeinsam haben. Es gibt Vorschläge, um 'sympify' anstelle von' eval' zu verwenden, aber (aus Sicherheitsgründen) sind sie fehlgeleitet, da diese im Grunde die gleichen sind. – Krastanov