从父函数中赋值给变量:“在赋值之前引用了局部变量”

18 浏览
0 Comments

从父函数中赋值给变量:“在赋值之前引用了局部变量”

对于以下Python 2.7代码:

#!/usr/bin/python
def func_a():
   print "func_a"
   c = 0 
   def func_b():
      c += 3
      print "func_b", c
   def func_c():
      print "func_c", c
   print "c", c
   func_b()
   c += 2
   func_c()
   c += 2
   func_b()
   c += 2
   func_c()
   print "end"
func_a()

我得到以下错误:

File "./a.py", line 9, in func_b
    c += 3
UnboundLocalError: local variable 'c' referenced before assignment

但是当我注释掉`func_b`中的`c += 3`这一行后,我得到以下输出:

func_a
c 0
func_b 0
func_c 2
func_b 4
func_c 6
end

在`func_b`的`+=`和`func_c`的`=`两种情况下,不是都访问了`c`吗?为什么其中一个会报错而另一个不会?

我没有将`c`设为全局变量并在`func_b`中声明`global c`的选择。无论如何,重点不是让`func_b`中的`c`增加,而是为什么对于访问局部或全局变量的两个函数,一个会报错而另一个不会。

0