Python 究竟什么时候创建局部变量?[复制]

When exactly does Python create a local variable? [duplicate]

提问人:alixi6 提问时间:10/29/2023 更新时间:10/29/2023 访问量:58

问:

我只是想弄清楚 Python 是如何工作的。谁能解释一下为什么当我们只在下一行定义局部变量时,Python 会将局部变量视为已经创建?a

a = 10
def func():
    print(a)
    a = 5
func()

错误消息是这样的:

cannot access local variable 'a' where it is not associated with a value

如果它被创建但在函数定义期间没有分配值 - 为什么该值不是?如果它没有被创建,为什么 Python 不打印全局的值?Nonea

我只是想了解在此代码中创建局部变量的确切位置。似乎它不是我们为其赋值的同一行,因为 Python 已经知道它是本地的。如果可以的话,有人请澄清一下a

python 函数 变量 local

评论

0赞 Thierry Lathuille 10/29/2023
如果将变量赋值给函数主体内的任何位置,则除非另有声明,否则该变量将被视为局部变量。
0赞 CherryDT 10/29/2023
因为在这一点上访问它是 100% 的时间是错误的,应该及早发现,所以例外是要走的路。
0赞 Tom Karzes 10/29/2023
未定义的变量和值为 的变量之间是有区别的。该值是完全有效的值。它可以自由访问、复制等。但是,对未定义变量的引用会导致错误。如果变量被赋值到函数中(并且未声明 or ),则它是该函数的本地变量。在赋值之前访问其值的任何尝试都是错误。要取消定义先前定义的局部变量,可以执行 。这与 非常不同,后者仅设置为 。NoneNoneglobalnonlocaladel aa = NoneaNone
0赞 slothrop 10/29/2023
对这个答案的评论(对链接的重复项之一)很有用,特别是如果你发现这种行为令人惊讶,因为“Python 是一种解释型语言”的想法: stackoverflow.com/a/370363/765091
0赞 alixi6 10/29/2023
澄清一下:我知道什么是局部变量、全局变量和非局部变量,并且我知道何时创建局部范围。请不要写一些关于这个主题的一般信息。我试图理解的是 Python 如何知道有一个局部变量“a”(在第一行中),而它还没有定义(定义只在第二行中)。

答: 暂无答案