2017-10-05 105 views
1

我正面臨一個我無法理解的問題。我使用Python C API來在C++應用程序中使用一些Python代碼。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。但是,我總是獲得原始值:25 當我通過PyRun_SimpleStringFlags()函數從C++運行Python函數時,看起來全局範圍並未保留。

我也試過PyObject_CallFunction()和行爲是一樣的。

當然,如果我從一個Python控制檯運行Python代碼,然後TheValue具有正確的值:50

什麼錯在這裏的? 有沒有人對此有過解釋? 在此先感謝!

回答

0

每個模塊都有其自己的全局變量環境,即模塊的__dict__。 MyModule中的代碼是設置MyModule的TheValue,這不會影響您之前導入到當前模塊(可能是__main__)中的TheValue的值。如果您重新導入了該值,或者執行了import MyModule並正在檢查MyModule.TheValue,則會看到更改後的值。 OK。

+0

OK。現在很明顯。謝謝你的解釋! – ZUBIGF