Mathematische Funktion in Python

OP #4348565
Lesenswert?

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
Persönliche Seite #4348598
Lesenswert?

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
Moderator #4348762
Lesenswert?

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.
Gast #4348895
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren