我在课堂上有笔记,但我不确定实际发生了什么。 除了增加混乱之外,阴影允许做什么?我以为因为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列表是可变的,那么与字符串相比,此示例如何更改等式?只是为了澄清,这些价值中的任何一个都是真正的全球吗?
谢谢。
答案 0 :(得分:2)
Shadowing不是一种技术或工具,它只是Python的范围规则的结果。
我对你的问题感到困惑,关于这些变量是否是全局的。在模块级别声明的任何内容都是全局的。 global
关键字在非全局范围内使用时,允许您将名称重新绑定到另一个对象,并使重新绑定在全局范围内生效:否则您只需在其中定义一个新变量局部范围(确实会遮蔽原始变量)。
答案 1 :(得分:1)
全球意味着变量将在全球空间中发生。因此,1 st 函数会删除全局命名空间中的旧字符串,并将其替换为新字符串。但是,列表是可变的,因为直接结果可以在全局范围之外更改。