您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从父函数分配给变量:“分配前引用的局部变量”

从父函数分配给变量:“分配前引用的局部变量”

在这里看到的是访问变量和分配变量之间的区别。在Python 2.x中,您只能分配给最内部作用域或全局作用域的变量(后者是通过使用global语句完成的)。您可以在任何封闭范围内访问变量,但不能在封闭范围内访问变量,然后在最内部或全局范围内对其进行分配。

这意味着如果在函数内部对名称进行了任何分配,则在访问名称之前,必须已经在最内部的作用域中定义了该名称(除非使用了全局语句)。在您的代码中,该行c += 3基本上等同于以下内容

tmp = c
c = tmp + 3

由于c函数中有分配给,因此该函数中的。这就是为什么您看到错误的原因,您试图访问c获取其的当前值+=,但c尚未定义本地范围。

在Python 3中,您可以通过使用nonlocal语句解决此问题,该语句允许您将变量分配给不在当前范围内但也不在全局范围内的变量。

您的代码看起来像这样,在顶部的类似行funcC

   def funcB():
      nonlocal c
      c += 3
      ...

在Python 2.x中,这不是选项,更改非局部变量值的唯一方法是可变。

最简单的方法是将您的值包装在一个列表中,然后在您之前刚刚使用变量名称的每个位置修改和访问该列表的第一个元素:

def funcA():
   print "funcA"
   c = [0]
   def funcB():
      c[0] += 3
      print "funcB", c[0]

   def funcC():
      c[0] = 5
      print "funcC", c[0]

   print "c", c[0]
   funcB()
   funcC()
   funcB()
   funcC()
   print "end"

funcA()

…以及输出

funcA
c 0
funcB 3
funcC 5
funcB 8
funcC 5
end
其他 2022/1/1 18:49:55 有532人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶