首页 > 解决方案 > (面向CS)关于Python中变量作用域的问题

问题描述

我对 Python 中的以下行为感到困惑,如果可能的话,我希望有人向我解释。我已将其简化为非常简单的代码,以指出问题所在:

这是启动代码:

def doSomething():
    print (a)

a = 'hello'
doSomething()

如您所料,这会毫不费力地打印出 'hello'。变量 a 在函数之外,但考虑到它的“全局范围”,仍然可以访问。所以,让我们把它重新分配给别的东西,好吗?

def doSomething():
    print (a)
    a = 'goodbye'

a = 'hello'
doSomething()

现在,这爆发了,告诉我在 print 语句中赋值之前引用了局部变量“a”。这很奇怪,因为变量 'a' 在 print 语句时出现(如第一个代码片段所示,效果很好)。那么为什么 Python 现在抱怨呢?

我的假设是,Python 会自动先发制人地扫描函数代码,以查看全局变量和局部变量之间是否存在命名空间冲突,如果是,则让本地变量获胜。所以对于第二个代码片段中的 doSomething() 函数,它已经确定 a 是一个局部范围变量,并使全局变量不可用,从而导致回溯。

这是正确的吗?还有什么其他解释?

标签: python

解决方案


推荐阅读