Python 2.7.6变量范围:奇怪的行为

时间:2016-04-20 13:56:30

标签: python scope global-variables

我写了一个示例代码:

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()中会产生这样的影响?

1 个答案:

答案 0 :(得分:1)

你遇到这个问题的原因是python寻找变量(闭包)的方式。首先,当你从x = 1开始时,x outside fun()是1,但在fun()里面没有&#34; x&#34;所以函数然后在函数外部查看并看到x = 1来获取值。当你执行l = [x for x in range(100)]时,你没有初始化变量x来运行循环,因此它无法编译(即它没有看到函数外部并且说x未定义)