项目1.py:
def runf(f):
f()
def main():
l = [0]
def f():
l.append(1)
runf(f)
print(l)
main()
给我(如预期):
[0, 1]
项目2.py:
def runf(f):
f()
def main():
l = [0]
def f():
l += [1] # <-- Only difference
runf(f)
print(l)
main()
给了我:
Traceback (most recent call last):
File "prog2.py", line 11, in <module>
main()
File "prog2.py", line 8, in main
runf(f)
File "prog2.py", line 2, in runf
f()
File "prog2.py", line 7, in f
l += [1]
UnboundLocalError: local variable 'l' referenced before assignment
有人能给我解释一下这是怎么回事吗?你知道吗
注意:这在python2和python3中都会发生。你知道吗
另外,我也愿意为这个问题提供更好的标题。你知道吗
Python的execution model reference(第4.1节)说明:
所发生的是
l += [1]
,为了结合,等价于l = l + [1]
,这意味着l
在f
内被结合。下面是另一个有趣的document reference:否则子句与此相关。由于您没有在
f
的范围内声明global l
并将其分配给l
,因此名称绑定在f
的本地命名空间中。然后,由l += [1]
隐式创建的对它的引用引用引用了一个尚未定义的变量。因此UnboundLocalError
。你知道吗顺便说一句,
global l
帮不了你。Python3有nonlocal
语句来处理如下情况:相关问题 更多 >
编程相关推荐