2017-10-05 2 views
1

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!

Antwort

0

Jedes Modul hat seine eigene globale Variablenumgebung, die des Moduls ist. Der Code in MyModule setzt MyModule TheValue, die den Wert TheValue nicht beeinflusst, den Sie zuvor in das aktuelle Modul (das wahrscheinlich __main__ ist) importiert wurde. Wenn Sie den Wert erneut importiert oder import MyModule ausgeführt und MyModule.TheValue untersucht haben, wird der geänderte Wert angezeigt.

+0

OK. Jetzt ist es klar. Danke für Ihre Erklärung! – ZUBIGF