【发布时间】:2012-01-19 23:13:14
【问题描述】:
对于以下 Python 2.7 代码:
#!/usr/bin/python
def funcA():
print "funcA"
c = 0
def funcB():
c += 3
print "funcB", c
def funcC():
print "funcC", c
print "c", c
funcB()
c += 2
funcC()
c += 2
funcB()
c += 2
funcC()
print "end"
funcA()
我收到以下错误:
File "./a.py", line 9, in funcB
c += 3
UnboundLocalError: local variable 'c' referenced before assignment
但是当我在funcB 中注释掉c += 3 行时,我得到以下输出:
funcA
c 0
funcB 0
funcC 2
funcB 4
funcC 6
end
在funcB 中的+= 和funcC 中的= 两种情况下都不会访问c 吗?为什么它不会为其中一个抛出错误,而不会为另一个抛出错误?
我无法选择将c 设为全局变量,然后在funcB 中声明global c。无论如何,重点不是让c 在funcB 中增加,而是为什么它会在funcB 而不是funcC 引发错误,而两者都在访问本地或全局变量。
【问题讨论】:
-
将 c 作为参数传递...
-
我现在稍微修改了代码,现在是问题的正确版本。
-
这个链接也有一些信息,docs.python.org/faq/…
-
移至 python 3 并使用
nonlocal关键字... -
@crk - 查看我最近的编辑,这应该有助于澄清。
标签: python