Ich stehe vor einem Problem, das ich nicht verstehen kann. Ich verwende die Python C-API, um Python-Code in einer C++ - Anwendung zu verwenden.Python C API und globale Variablen in Python-Funktionen geändert
Grundsätzlich habe ich ein Python-Modul (MyModule.py) mit diesem Material:
TheValue=25
def modifyValue():
global TheValue
TheValue=50
Dann wird aus dem C++ Code, ich habe diesen:
...
PyRun_SimpleStringFlags ("from MyModule import *", NULL);
...
PyRun_SimpleStringFlags ("modifyValue()", NULL);
PyRun_SimpleStringFlags ("print(TheValue)", NULL);
...
Also, ich erwartet, dass "TheValue" hatte aufgrund des im Python-Code definierten globalen Bereichs einen Endwert von 50. Allerdings bekomme ich immer den ursprünglichen Wert: 25. Es scheint, dass der globale Geltungsbereich nicht beibehalten wird, wenn ich Python-Funktionen von C++ über die PyRun_SimpleStringFlags() - Funktion ausführen.
Ich versuchte auch die PyObject_CallFunction() und Verhalten ist das gleiche.
Natürlich, wenn ich den Python-Code aus einem Python-Konsole ausführen, dann hat theValue den richtigen Wert: 50.
Was ist hier falsch ist? Hat jemand eine Erklärung dafür? Vielen Dank im Voraus!
OK. Jetzt ist es klar. Danke für Ihre Erklärung! – ZUBIGF