【问题标题】:python global variable troublepython全局变量麻烦
【发布时间】:2011-06-08 07:27:31
【问题描述】:

我在 python 中使用全局变量时遇到问题...

在我的程序中,我声明了 2 个全局变量, 全局 SYNC_DATA 和 全局 SYNC_TOTAL_SIZE

现在在我的一个函数中,我可以使用全局变量 SYNC_DATA 而无需在函数中再次将其声明为全局变量;但是,我无法以相同的方式使用其他全局变量 SYNC_TOTAL_SIZE。我必须在函数中再次将后者声明为全局才能使用它。如果我使用它而不在函数中声明为全局,我会收到此错误 - “UnboundLocalError: local variable 'SYNC_TOTAL_SIZE' referenced before assignment”

为什么有时我可以访问全局变量而无需在函数中将它们声明为全局变量,而有时却不能? 以及为什么我们必须在函数中再次将它声明为全局,而它已经在开始时声明过一次......为什么函数不检查全局命名空间中的变量,如果它在它的直接命名空间?

【问题讨论】:

    标签: python global-variables


    【解决方案1】:

    假设SYNC_TOTAL_SIZE 未声明为局部变量。这取决于您对全局变量执行的操作,对于仅读取全局变量,无需将其声明为全局变量,但如果您要修改全局变量的值,则必须使用global 声明它。

    【讨论】:

    • 这行得通...我正在更改该函数中 SYNC_TOTAL_SIZE 的值,而我只是在另一个函数中读取 SYNC_DATA,因此它允许我不将其声明为全局。谢谢。
    【解决方案2】:

    因为SYNC_TOTAL_SIZE 可能在该代码中的其他地方使用为非全局的,这使得 Python 找到它并认为它不是全局的。另一个原因可能是您只是在某个函数中阅读它,因此它不需要global 声明(有关更多详细信息,请参阅this question)。如需准确诊断,请发布演示您的问题的最小代码 sn-p。

    建议总是说global

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2018-11-25
      相关资源
      最近更新 更多