【问题标题】:Is this x in local scope of inner function?这个 x 在内部函数的本地范围内吗?
【发布时间】:2017-07-04 15:59:36
【问题描述】:

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

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

【问题讨论】:

  • 您期望的是 2,但它打印了 2?那不一样吗?此外,该代码不会打印任何内容。

标签: python python-2.7 scope


【解决方案1】:

这里有两个独立的x 变量:outer 函数有一个x 变量,inner 函数有自己的x 变量。

从函数中某处对变量赋值的那一刻起,该变量就具有局部作用域。

所以当您调用outer() 时,您将返回1inner 函数中的x 是一个不同的函数,而且inner()从不 调用的。因此,不会打印(本地)x

如果你这样写:

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

然后调用outer() 将返回3。即使您在 outer() 函数中调用了 inner(),它也没有任何区别。由于inner() 函数中的xouter() 函数中的x 不同(inner 中定义了一个本地范围)。虽然这意味着你print 2,但你会return 3

【讨论】:

  • 感谢威廉指出!看来我对范围的理解是正确的,但我从来没有在outer 内部调用inner 函数。
  • @RuilinLi:这两个x变量是独立作用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2011-12-28
相关资源
最近更新 更多