python - (面向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 是一个局部范围变量,并使全局变量不可用,从而导致回溯。
这是正确的吗?还有什么其他解释?
解决方案
推荐阅读
- regular-language - 编写描述集合的正则表达式
- perl - 带有 message_string() 函数的错误 IMAPClient
- sequelize.js - 为受约束的关联起别名
- mysql - 什么是 SCHEMA_MIGIMP..MIGRATION_STATUS?
- c# - 我想将值编号添加到文本框的第一个元素
- sapui5 - 如何在 XML 视图中传递 sap.m.P13nItem 的值
- symfony - 更新学说的数组结果
- perl - arg 1 的类型必须是块或子 {}(不是子程序条目)
- java - 来自 EclipseLink 的 ScrollableCursor 抛出 SQLException:结果集已关闭。在远程环境上
- mysql - MySQL Select Query 运行速度很慢