Python 中 global 关键字与变量作用域判定规则详解

陆遥
陆遥
发布时间:2026-10-13 | 6人浏览过
原创

本文详解Python中global关键字对变量作用域的影响,提供判定全局与局部变量的四条核心规则。通过代码示例解析cook函数执行结果,并深入分析因先使用后定义导致的UnboundLocalError错误原理,帮助开发者准确掌握变量作用域机制。

global关键字与变量作用域判定规则

在Python函数内部,使用global关键字可以修改全局变量的值。

要准确判断一个变量究竟属于全局作用域还是局部作用域,可依据以下规则进行判定:

  1. 若变量定义在全局作用域,则该变量为全局变量。
  2. 若变量在函数内部定义,且显式声明了global关键字,则该变量被视为全局变量。
  3. 若变量仅在函数内部被定义,而未使用global关键字,则该变量为局部变量。
  4. 若变量在函数内部仅被读取使用,而未在函数内重新赋值或定义,则该变量引用的是全局变量。

代码示例与执行结果分析

通过以下代码示例,可以直观理解上述作用域判定规则:


def cook():
  global dumplings
  dumplings = '10' # 全局变量
  print('cook():' + dumplings)
def cook2():
  dumplings = '22' # 局部变量
  print('cook2():' + dumplings)
def cook3():
  print('cook3():' + dumplings) # 全局变量
dumplings = 3 # 全局变量
cook()
print('global:' + dumplings)
cook3()
cook2()

运行结果如下:

cook():10 global:10 cook3():10 cook2():22

UnboundLocalError错误原理分析

需要注意的是,如果在函数内部先使用(读取)变量,随后才对其进行定义赋值,程序将抛出错误:


def cook():
  print(dumplings)
  dumplings = 'local'
dumplings = 'global'
cook()

具体报错信息为:

UnboundLocalError: local variable 'dumplings' referenced before assignment

产生该错误的原因是:Python解释器在函数内部检测到存在对变量dumplings的定义赋值语句,因此将该变量整体识别为局部变量。在局部变量尚未完成定义赋值之前,尝试访问该局部变量便会触发UnboundLocalError异常。

总结

以上介绍了Python中global关键字对变量作用域的影响,希望本文内容能为您提供帮助。如有任何疑问,欢迎留言交流,我们将及时回复。感谢大家对本站的支持! 如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表