Hallo, ich bin gerade dabei mir ein kleines Skript zu schreiben, welches mathematische Funktionen plottet. Das Funktioniert auch schon sehr gut. Nun will ich aber das der Nutzer am anfang des Programms eingeben soll, welche funktion er denn geplottet haben möchte (bisher muss dafür der Code verändert werden). Also brauche ich eine Art Variable in der roher Code (sowas wie 2*pow(x,2)+2, oder so) drin steht, damit der Nutzer nicht bei jedem Neuaufruf der Funktion alles neu eingeben muss. Gibt es so etwas?? Und wenn ja, wäre es super mir kurz zu erklären wie es geht Danke und Grüße Ole
Methoden/Funktionen?? Aber ich glaube ich hab die Frage nicht verstanden.
Die eingebaute Funktion "exec" ermöglicht die Ausführung von Python-Code, der in einem String gespeichert ist. Du musst bei der Benutzung halt bedenken, dass dem Nutzer dadurch die Möglichkeit gegeben wird, eine beliebige Python-Funktion auszuführen. Die Verwendung dieser Funktion ist also nicht ganz sicher ;-)
1 | a=1 |
2 | exec( 'print(a+1)') |
3 | # Ausgabe: 2 |
Man kann dynamisch auch eine Funktion erzeugen, die dann genauso wie eine hartcodierte aufgerufen wird:
1 | # Beispiel für Funktion mit den Argumenten x und y |
2 | |
3 | # Funktionsausdruck definieren |
4 | expr = 'x*y' |
5 | |
6 | # Daraus eine Funktion f erzeugen |
7 | f = eval('lambda x, y: ' + expr) |
8 | |
9 | # Funktion aufrufen |
10 | z = f(2.5, 3.5) |
11 | |
12 | print(z) |
Da bei der eigentlichen Berechnung der Funktionswerte die langsame eval-Funktion nicht mehr aufgerufen werden muss, ist diese Lösung sehr schnell (sogar noch etwas schneller, als wenn man die Funktion mit
1 | def f(x, y): |
2 | return x * y |
hartcodiert.
Wenn du in dem, was der Benutzer eingibt, nur Ausdrücke haben willst (also z.B. keine neu definierten Funktionen), dann passt eval besser als exec:
1 | >>> import math |
2 | >>> names = dict(math.__dict__) # Kopie, damit das Original im folgenden nicht geändert wird |
3 | >>> names['x'] = 2 |
4 | >>> eval('3*sin(x)', names) |
5 | 2.727892280477045 |
Das dictionary von math brauchst du, wenn du in dem Ausdruck so Funktionen wie "sin" verwenden willst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.