2017-07-25 66 views
-1

我正在写一个实践项目从列表中添加项目到一个现有的字典这个函数为什么会将我的字典更改为None?

def addToInventory(inventory, addedItems): 
    for i in addedItems: 
     inventory[i] = inventory.get(i,0) + 1 

stuff = {'gold coin': 42, 'rope': 1} 
loot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'] 
stuff = addToInventory(stuff, loot) 

为什么东西运行此之后改为无?

+10

你不返回任何东西,因此'None' 。 – Li357

+1

所以只需将最后一行改为'addToInventory(stuff,loot)',而不必将返回的None分配给'stuff'。 – RemcoGerlich

+0

另请参阅https://stackoverflow.com/questions/15300550/python-return-return-none-and-no-return-at-all –

回答

3

事实上,你的代码几乎是好的,你只有一个错误。 python中的字典是可变的,然后当你在你的功能中修改它时,修改你作为参数传递的字典。但是因为你写的时候你的功能不返回任何东西:

stuff = addToInventory(stuff, loot) 

你把东西分配给None。

你有两个选择: 返回字典在函数的末尾:

def addToInventory(inventory, addedItems): 
    for i in addedItems: 
     inventory[i] = inventory.get(i,0) + 1 
    return inventory 

或不重新分配的东西:

addToInventory(stuff, loot) 
2

函数中没有return语句,因此它不返回任何内容 - None

解决方案?在你的函数中添加return语句

def addToInventory(inventory, addedItems): 
    for i in addedItems: 
     inventory[i] = inventory.get(i,0) + 1 
    return inventory 
相关问题