如何使用全局变量的阴影?

时间:2014-11-15 22:46:50

标签: python shadowing

我在课堂上有笔记,但我不确定实际发生了什么。 除了增加混乱之外,阴影允许做什么?我以为因为globalString是一个字符串类型,它无法修改?如何访问原始值?什么是内存术语的实例?

globalList = [1,2,3]
globalString = "global"     # can't be modified because it's a string

def updateGlobalString():
    global globalString     # Does line this do anything?
    globalString = "new"

print(globalString)
>>> "global"
updateGlobalString()
>>> "new"

def updateGlobalList():
    globalList.append(4)

print(globalList)
>>> [1,2,3]
updateGlobalList()
print(globalList)
>>> [1,2,3,4]

如果python列表是可变的,那么与字符串相比,此示例如何更改等式?只是为了澄清,这些价值中的任何一个都是真正的全球吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

Shadowing不是一种技术或工具,它只是Python的范围规则的结果。

我对你的问题感到困惑,关于这些变量是否是全局的。在模块级别声明的任何内容都是全局的。 global关键字在非全局范围内使用时,允许您将名称重新绑定到另一个对象,并使重新绑定在全局范围内生效:否则您只需在其中定义一个新变量局部范围(确实会遮蔽原始变量)。

答案 1 :(得分:1)

全球意味着变量将在全球空间中发生。因此,1 st 函数会删除全局命名空间中的旧字符串,并将其替换为新字符串。但是,列表是可变的,因为直接结果可以在全局范围之外更改。