这个x是局部范围内的函数吗?

时间:2017-07-04 15:59:36

标签: python python-2.7 scope

考虑以下代码,我期望输出为2,因为要打印的xinner函数范围内的局部变量。但是,它打印了2。我不明白为什么会这样。任何解释和/或评论都表示赞赏。

def outer():
    x = 1
    def inner():
        x = 1
        x += 1
        print x
    return x

1 个答案:

答案 0 :(得分:0)

此处有两个单独的x变量:outer函数有一个x变量,inner函数有自己的x变量。

从函数某处的变量赋值开始,该变量具有局部范围。

因此,当您致电outer()时,您将返回1x函数中的inner是另一个函数,此外inner() 从不调用。因此,不会打印(本地)x

如果你这样写的话:

def outer():
    x = 3
    def inner():
        x = 1
        x += 1
        print x
    return x

然后调用outer()将返回3。即使你在inner()函数中调用outer(),它也会没有任何区别。由于x函数中的inner()不是outer()函数中的innerprint 2中定义了本地范围)。虽然这意味着您return 3,但您会var tomorrow = new Date(new Date().getTime() + 24 * 60 * 60 * 1000); schDate = tomorrow.toDateString();