2011-01-13 110 views
1

我有使用Python中的全局变量的麻烦......蟒蛇全局变量的麻烦

在我的计划,我已经宣布2个全局变量, 全球SYNC_DATA和 全球SYNC_TOTAL_SIZE现在

在我的一个函数,我可以使用全局变量SYNC_DATA而不必在函数中声明为全局变量;但是,我无法以相同的方式使用其他全局变量SYNC_TOTAL_SIZE。我必须再次声明后者为全局函数才能使用它。我得到这个错误,如果我使用它没有声明为全局函数 - “UnboundLocalError:本地变量'SYNC_TOTAL_SIZE'在赋值之前引用”

为什么有时我可以访问全局变量而无需声明它们是全局函数有时候不是? 为什么当我们不得不在函数中声明它为全局函数时,我们不得不在函数中声明它为全局函数......为什么函数只检查全局名称空间中的变量,如果它没有找到它的名字空间直接?

回答

6

假设SYNC_TOTAL_SIZE未被声明为局部变量。它取决于你在全局变量上执行什么操作,只需要读取全局变量就不需要声明它是全局变量,但是如果你正在修改全局变量的值,你必须用global来声明它。

+0

这工作......我正在改变该函数中的SYNC_TOTAL_SIZE的值,而我只是读其他函数中的SYNC_DATA,所以它允许我没有声明它是全局的。谢谢。 – 2011-01-13 06:02:23

0

因为SYNC_TOTAL_SIZE可能在该代码的其他地方被用作非全局的,这使得Python发现它并认为它不是全局的。另一个原因可能是您只是在某些功能中阅读它,所以它不需要global声明(有关更多详细信息,请参见this question)。为了确切诊断,请发布一个说明您的问题的最小代码片段。

当你的意思是建议总是说global