错误示范:第二次不加global关键字
假设我们在function2中移除global answer声明,代码如下所示:
answer = "Initial value"
def function1():
global answer
answer = "Value updated by function1"
def function2():
items = ['item1', 'item2', 'item3']
for item in items:
answer = '' # 在每次循环开始前初始化answer为空字符串,但未声明为全局
function1() # 更新answer
dat = [
{
'txt': item,
'output': answer
}
]
print(dat)
function2()
在这种情况下,function2内部对answer的赋值answer = ''将创建一个局部变量answer,而不是修改全局的answer。这意味着function1中对answer的更新将不会被function2的循环所感知,因为在每次循环开始时,function2都会创建一个新的局部变量answer并将其设置为空字符串。
错误示范结果:
function1更新的answer值在function2的循环中不可见。
循环中输出的answer将始终是空字符串,因为每次循环都会创建一个新的局部answer变量并将其初始化为空字符串。
正确示范:使用global关键字
现在,我们将global answer声明放回function2中,以确保answer的修改作用于全局变量:
answer = "Initial value"
def function1():
global answer
answer = "Value updated by function1"
def function2():
global answer
items = ['item1', 'item2', 'item3']
for item in items:
answer = '' # 在每次循环开始前初始化answer为空字符串
function1() # 更新answer
dat = [
{
'txt': item,
'output': answer
}
]
print(dat)
function2()