我写了一个示例代码:
def fun():
print x
l = [x for x in range(100)]
print x
x = 1
fun()
它给出了这个错误:
Traceback (most recent call last):
File "scope.py", line 7, in <module>
fun()
File "scope.py", line 2, in fun
print x
UnboundLocalError: local variable 'x' referenced before assignment
但如果我像这样评论第三行:
def fun():
print x
#l = [x for x in range(100)]
print x
x = 1
fun()
打印出来:
1
1
那里发生了什么?为什么l = [x for x in range(100)]
在fun()
中会产生这样的影响?
答案 0 :(得分:1)
你遇到这个问题的原因是python寻找变量(闭包)的方式。首先,当你从x = 1
开始时,x outside fun()是1,但在fun()里面没有&#34; x&#34;所以函数然后在函数外部查看并看到x = 1
来获取值。当你执行l = [x for x in range(100)]
时,你没有初始化变量x来运行循环,因此它无法编译(即它没有看到函数外部并且说x未定义)