當嘗試一個GUID分配給類實例的代碼,我寫了類似如下的內容:爲什麼不可變的對象拋出UnboundLocalError但可變的對象不?
#!/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
@ Zizouz212你需要註釋掉'global x_id'這一行來獲取錯誤。 – dimo414
[從父函數分配變量:「賦值前引用的本地變量」](http:// stackoverflow。com/questions/8934772/assign-to-variable-from-parent-function-local-variable-referenced-before-as) – Zizouz212