You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何向字典添加元素后内容被清空?Python技术求助

问题解决:Python函数操作后字典看似被清空的原因与修复

你在学习《Automate the Boring Stuff》Python教程时,遇到了这样的问题:addToInventory函数内部操作字典时能看到内容正常更新,但函数执行完毕后,调用displayInventory却显示字典为空。你的代码如下:

inv = {'gold coin': 42, 'rope': 1}

def addToInventory(dict, addedItems):
    
    for i in addedItems:
        if i not in dict:
            dict[i] = 1
        else:
            dict[i] = dict[i] + 1
        print(dict) # 用于检查函数内的字典状态

def displayInventory(inventory):
    print("Inventory:")
    item_total = 0
    for k, v in inventory.items():
        print(v, k)
        item_total += v
    print("Total number of items: " + str(item_total))


dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)

displayInventory(inv) # 此处字典显示为空

问题原因

核心问题出在inv = addToInventory(inv, dragonLoot)这行代码。你的addToInventory函数没有定义return语句,Python中无返回值的函数默认返回None。这就导致原本指向库存字典的变量inv,被重新赋值成了None——并不是原字典内容被清空,而是变量现在指向的是None,调用displayInventory自然无法显示有效内容。

修复方案

有两种简单的修复方式:

方式一:去掉不必要的赋值操作

字典是可变对象,函数内部对它的修改会直接作用于原对象,不需要返回再赋值。把调用代码改成:

addToInventory(inv, dragonLoot)

直接调用函数即可,原inv字典会被正确修改。

方式二:让函数返回修改后的字典

如果想保持赋值的写法,可以给addToInventory函数添加返回语句:

def addToInventory(dict, addedItems):
    for i in addedItems:
        if i not in dict:
            dict[i] = 1
        else:
            dict[i] += 1
        print(dict)
    return dict  # 添加这行返回修改后的字典

这样inv = addToInventory(inv, dragonLoot)会把修改后的字典重新赋值给inv,后续调用displayInventory就能正常显示了。

验证效果

修复后再次运行代码,displayInventory会输出正确的库存内容:

Inventory:
45 gold coin
1 rope
1 dagger
1 ruby
Total number of items: 48

内容的提问来源于stack exchange,提问作者Raffy Harvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:57:21