gpt4 book ai didi

python - Python 中的局部函数

转载 作者:IT老高 更新时间:2023-10-28 21:55:03 24 4
gpt4 key购买 nike

在以下 Python 代码中,我得到一个 UnboundLocalError。据我了解,局部函数共享包含函数的局部变量,但这里似乎并非如此。我认识到 a 在这种情况下是一个不可变的值,但这应该不是问题。

def outer():
a = 0
def inner():
a += 1
inner()
outer()

似乎内部函数已收到父函数中所有引用的副本,因为如果 a 的值为包装在可变类型中。

是否有人能够澄清这里的行为,并指出相应的 Python 文档?

最佳答案

我相信您将其视为“可变性”问题是正确的。虽然您发布的代码确实会引发“UnboundLocalError”,但以下代码不会:

def outer():
a = 0
def inner():
print a
inner()
outer()

Python 不允许您在内部范围内从外部范围重新分配变量的值(除非您使用关键字“global”,在这种情况下不适用)。

查看此 Python 2.6.2 文档中“类”文档的底部部分:

9.2. Python Scopes and Namespaces

[…] If a name is declared global, then all references and assignments go directly to the middle scope containing the module’s global names. Otherwise, all variables found outside of the innermost scope are read-only (an attempt to write to such a variable will simply create a new local variable in the innermost scope, leaving the identically named outer variable unchanged).

您的“UnboundLocalError”是因为您的函数实际上是在声明一个名为“a”的新变量,然后立即尝试对其执行“+=”操作,但这会失败,因为“a”还没有值。 (将“a+=1”视为“a = a+1”,如果“a”未定义,则可以看出问题)。

一般来说,如果您要修改“a”,人们通常绕过它的方法是使用可变类型来传递“a”(例如列表或字典)。您可以通过可变类型的内容修改“a”(正如您在使用此设置进行测试时可能注意到的那样)。

希望有帮助!

关于python - Python 中的局部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1414304/

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