gpt4 book ai didi

从未执行赋值时的 Python 作用域

转载 作者:行者123 更新时间:2023-12-04 00:20:46 25 4
gpt4 key购买 nike

我明白了

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

f()
print(x)

返回 5 和 5。

我也明白了

x = 5
def f():
x = 7
print(x)

f()
print(x)

返回 7 和 5。

下面的问题是什么?

x = 5
def f():
if False:
x = 7
print(x)
else:
print(x)

f()
print(x)

我猜想既然 x=7 从未发生过,我应该再次得到 5 和 5。相反,我得到了

UnboundLocalError:赋值前引用了局部变量“x”

python是否将x视为局部变量,因为在这个缩进 block 中有一个赋值表达式,不管它是否被执行?具体是什么规则?

最佳答案

当定义函数时,python 将 x 解释为局部变量,因为它是在函数体内分配的。在运行时,当您进入 else 子句时,解释器会查找未分配的局部变量 x

如果你想让 x 引用同一个变量,你可以在函数体内添加 global x,在它赋值之前基本上告诉 python 当我调用 x 时,我将引用全局范围的 x

关于从未执行赋值时的 Python 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61036500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com