2017-10-05 88 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