理解Python中global关键字的使用及作用

错误示范:第二次不加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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值