2017-10-05 13 views
1

私は理解できない問題に直面しています。私は、Python C APIを使ってPythonコードをC++アプリケーションで使用しています。Python C APIとグローバル変数がPython関数で修正されました

基本的に、私はこのようなもので、Pythonのモジュール(MyModule.py)を持っている:

TheValue=25 
    def modifyValue(): 
     global TheValue 
     TheValue=50 

はその後、C++コードから、私はこの持っている:だから

... 
    PyRun_SimpleStringFlags ("from MyModule import *", NULL); 
    ... 
    PyRun_SimpleStringFlags ("modifyValue()", NULL); 
    PyRun_SimpleStringFlags ("print(TheValue)", NULL); 
    ... 

を、私がいることを期待Pythonコードで定義されているグローバルスコープのため、 "TheValue"の最終値は50でした。しかし、私はいつもオリジナルの値を取得しています: Python関数をPythonの関数をPythonのPyRun_SimpleStringFlags()関数を通して実行していると、グローバルスコープが保持されないようです。

PyObject_CallFunction()も試しましたが、動作は同じです。ここで間違って何50

:私はpythonのコンソールからPythonコードを実行する場合はもちろん

、そしてTheValueは正しい値を持っていますか? 誰もこれについて説明していますか? ありがとうございます!

答えて

0

各モジュールには、モジュールの__dict__という独自のグローバル変数環境があります。 MyModuleのコードは、MyModuleのTheValueを設定しています。これは、以前に現在のモジュールにインポートしたTheValueの値に影響しません(おそらく__main__)。値を再インポートした場合、またはimport MyModuleを実行してMyModule.TheValueを調べていた場合は、変更された値が表示されます。

+0

OK。今それは明らかです。あなたの説明をありがとう! – ZUBIGF

関連する問題