Die Linien
f, a, b = symbols('f a b')
f = a + b
b = 10
nicht ändern b
im Ausdruck. Wenn Sie f
drucken, sehen Sie, dass es immer noch als a + b
definiert ist.
Sie verwechseln Python-Variablen mit SymPy-Symbolen. In der ersten Zeile zeigt die Python-Variable b
auf ein SymPy-Symbol mit dem Namen b
(in der Tat müssen sie nicht den gleichen Namen haben; Sie könnten auch x = Symbol('b')
und y = a + x
geschrieben haben). In der zweiten Zeile zeigt die Variable f
auf einen SymPy-Ausdruck, der das Symbol b
enthält. In der dritten Zeile zeigt die Variable b
auf die Ganzzahl 10. Dies ändert nichts an vorherigen Zeilen, die die Variable b
verwendet haben, da sie bereits ausgeführt wurden. Es ist nicht anders, als wenn Sie
a = 1
b = 1
c = a + b
b = 2
lief Sie würden den Wert von c
am Ende erwarten 2
, nicht 3
zu sein. Wenn b
auf ein Symbol zeigt, verwenden Ausdrücke, die Sie damit erstellen, ein Symbol. Wenn Sie es jedoch so ändern, dass es auf eine Zahl zeigt, wirkt sich dies nicht auf vorherige Zeilen aus, wenn es ein Symbol war.
Der empfohlene Weg, um dies in SymPy zu behandeln, ist zu vermeiden, die gleiche Variable zu einem Symbol und später zu einem Nicht-Symbol zuzuweisen (es ist erwähnenswert, dass Ihre Definition von f
in der ersten Zeile völlig nutzlos ist, da Sie definieren es sofort in der zweiten Zeile). Um ein Symbol in einem Ausdruck zu ersetzen, verwenden subs:
a, b = symbols('a b')
f = a + b
f1 = f.subs(b, 10)
Beachten Sie, dass subs
nicht die ursprünglichen f
ändern. Es gibt einen neuen Ausdruck zurück.
This document kann auch dazu beitragen, diese Verwirrung zu beseitigen.
Sie sollten die Verwendung von Zeichenfolgen als Eingabe für SymPy-Funktionen vermeiden. – asmeurer