Meine App ermöglicht es dem Benutzer, einfache Python-Ausdrücke anzugeben, die als Funktionen einer bestimmten Variablen verwendet werden. Zum Beispiel könnte der Benutzer schreiben 'x**2 + 2*x + 4'
und meine App würde das in eine Funktion von x
, äquivalent zu lambda x: x**2 + 2*x + 4
zu analysieren. Ich weiß schon, wie dies zu tun mit:Wie analysiert man Python-Funktionen aus Strings mit einem beliebigen Variablennamen?
def _f(expression, template):
code = parser.expr(expression).compile()
return template(code)
def function_x(expression):
return _f(expression, lambda code: lambda x: eval(code))
jedoch, dass nur eine Funktion Parser für x
macht. Wenn ich eine andere Variable Arbeit machen wollen, würde ich mehr Parser definieren, wie:
def function_xy(expression):
return _f(expression, lambda code: lambda x, y: eval(code))
def function_n(expression):
return _f(expression, lambda code: lambda n: eval(code))
def function_A(expression):
return _f(expression, lambda code: lambda A: eval(code))
Gibt es eine bessere Art und Weise Benutzerfunktionen von jede vorgegebene Variable zu analysieren? Das heißt, ich kann ein bestimmtes Eingabefeld in der UI vordefinieren, um Funktionen von u
zu akzeptieren, während ein anderes Eingabefeld zum Akzeptieren von Funktionen von v
und so weiter vordefiniert wird. Nur der Buchstabe u
würde im ersten Eingabefeld funktionieren, während nur der Buchstabe v
im zweiten Eingabefeld funktionieren würde.
Bitte beachten Sie, dass die Variablennamen selbst vordefiniert sind; Der Benutzer wählt nicht aus, welche Buchstaben er verwenden möchte.
Ist das nur für Spaß/Bildung? Weil sympy ziemlich mächtig ist –
Ich erstelle ein parametrisches Funktionsplotter-Modul für meine [Satz-App] (https://github.com/kelvin13/Knockout), [Bild] (http://www.pasteall.org/pic/ show.php? id = 104850). Einige andere Teile der App verwenden ebenfalls das gleiche Benutzerfunktions-Framework, aber die Menge der möglichen variablen Buchstaben ist ziemlich klein, so dass der Ansatz, den ich oben hatte, gut funktioniert hat. Ich weiß, dass SymPy solche Sachen gut machen kann, aber SymPy fühlt sich an wie ein furchtbar großer Hammer, den ich benutzen kann, wenn ich nur ein paar extra variable Namen brauche. –