python 使用全局变量给出 NameError

python giving NameError with global variable

有人可以帮我理解为什么会抛出 NameError 吗?我正在定义和初始化 'cnt',然后将其声明为全局变量,但我收到一个 NameError,即 'cnt' 未定义。

def my_func():
  cnt = 0

  def add_one():
    global cnt
    cnt = cnt + 1

  print(cnt)
  add_one()
  print(cnt)

cnt 就在my_func() 里,add_one() 找不到。您应该在 My_func() 中将其全局化,然后 add_one() 可以访问它

def my_func():
  cnt = 0
  global cnt
  def add_one():
    cnt = cnt + 1

  print(cnt)
  add_one()
  print(cnt)

在python中,变量有三种作用域:本地、非本地和全局。

  • 函数中的变量,变量的作用域是局部的。
  • 函数外的变量,变量的作用域是全局的。
  • 对于嵌套函数,如果变量在外部函数中,则其作用域对于内部函数是非本地的。如果内层函数要访问外层函数中的变量,需要使用nonlocal关键字。

因此,将 global cnt 更改为 nonlocal cnt,代码将有效。

本文档可以帮助您了解 python:
中的变量作用域 Python Scope of Variables