Python 范围错误

标签 python variables scope

此代码给出“未绑定(bind)错误”(在此查询 Python variable scope error 中讨论)

x=3
def f():
    print x
    x+=3

这样做的原因(如答案中给出的)是,一旦使用了赋值运算符,“x”就会成为局部变量,并且由于“x”没有附加值,因此无法将其增加 3。 但请查看这段代码

x=3
def f():
    print x
    x=3

这次似乎“x”没有值,因此应该没有任何问题,但出现了相同的错误。

UnboundLocalError: local variable 'x' referenced before assignment

如果Python在读取语句“x=3”后已经创建了一个局部变量“x”,那么为什么它不打印“x”?

值得注意的是,这段代码不会产生错误

x=3
def f():
    print x
    x

输出为“3”(当调用 f() 时)

这让我很困惑,这次是不是在“f()”内部声明了“x”,那么Python不应该将这个“x”添加到其局部变量列表中吗?

最佳答案

那么您链接到的问题明确指出:

Python treats variables in functions differently depending on whether you assign values to them from within the function or not.

因此,在前两个示例中,您分配给变量 x - 无论您是在 print 语句之前还是之后执行此操作 - 这意味着存在一个局部变量x

在上一个示例中,您没有分配给x:x不是分配,只是x = (或 x += 等)是赋值。所以它是一个表达式。因此,在最后一个示例中没有局部变量x,并且使用了函数范围之外的变量。

关于Python 范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42584108/

相关文章:

python - 使用 sympy 求解超越方程

javascript - Javascript 和 DOM 作用域和赋值规则的哪些方面阻止了代码在 html 的第二个 block 上工作?

c++ - c++语言中的 block 作用域解析

javascript - 在函数内执行 javascript 函数

python - 无法在 Windows 上使用 git-p4 导入

python - 如何使用 pyOpenssl 解码 CSR

python - 通过 SSH 命令从 Mac OS X 计算机启动远程脚本

java - 声明一次并更新值比声明每次更新更快吗?

variables - 具有多个变量的简短变量声明

Javascript:多个变量声明 - 变量何时可用?