为何向字典添加元素后内容被清空?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
相关产品推荐
相关产品推荐

