2017-07-25 54 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 
相關問題