【发布时间】:2015-12-03 00:51:57
【问题描述】:
在尝试将 GUID 分配给类实例的代码时,我编写了类似于以下内容的代码:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
x_id = 0 # immutable
x_id_list = [0] # mutable
def fx(x):
global x_id # Disable to get "UnboundLocalError: local variable 'x_id' referenced before assignment"
if x is None:
x_id += 2
x_id_list[0] += 2
else:
x_id += 1
x_id_list[0] += 1
return (x_id - 1)
return x_id
expected = [x for x in xrange(10)]
actual = [fx(x) for x in expected]
assert(expected == actual), "expected = {}, actual = {}".format(expected, actual)
print x_id_list
print x_id
请注意,如果未定义其全局范围,则只有不可变的 x_id 会抛出 UnboundLocalError,但可变的 x_id_list 无需定义其全局范围即可继续正常工作。
这是为什么呢?
【问题讨论】:
-
我没有得到异常(也不应该引发异常)。你的程序为我输出
[10]和10。 -
@Zizouz212 您需要注释掉
global x_id行以获取错误。 -
如果你这样做
x_id_list += [2],你也会得到一个UnboundLocalError。这不是可变性的问题。