为什么分配局部变量会改变函数中前一行代码的行为?

问题描述 投票:0回答:1

一直在做测试,试图理解这里的文档中写的内容。

https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces

我注意到,如果一个函数使用一个尚未在本地定义的变量,它将使用父作用域中设置的变量。但是,如果该函数稍后在函数中设置该变量,则它将决定它不能使用父作用域中的变量集并且死掉。

下面的第一个功能有效,第二个功能没有。

def printthingy():
    print(foo)
    #foo = 'goodbye world'

def printthinghy2():
    print(foo)
    foo = 'goodbye world'

foo = 'hi world'
printthingy()
printthinghy2()

我希望函数在能够找到foo进行打印方面表现得一致。相反,第一个函数工作,第二个函数给出“赋值前引用的局部变量'foo”错误。

python
1个回答
1
投票

阅读本地和全局变量。在Python中,默认情况下,函数中分配的每个变量都被视为本地变量,否则为全局变量。所以首先工作,因为foo被认为是全局和第二次崩溃,因为它被认为是本地的,但在首次访问时尚未分配。

© www.soinside.com 2019 - 2024. All rights reserved.