我正在嘗試以下字典兩次,并希望通過分別運行兩次函式來添加數量 10 和 90 。我正在嘗試累計總數為 100。但是,我一直得到 90,因為它不記得我的函式之外的值。我嘗試將其設為全域變數,但無濟于事。謝謝
'''
global new_inventory
global inventory
new_inventory = {}
def add_fruit(inventory, fruit, quantity=0):
if inventory == {}:
inventory = {fruit:quantity}
elif inventory != {}:
inventory = inventory.get(fruit,0) quantity
return inventory
add_fruit(new_inventory,'strawberry',10)
add_fruit(new_inventory,'strawberry',90)
'''
uj5u.com熱心網友回復:
不要inventory在你的函式中重新分配,而是使用它的方法!
然后它將仍然是對同一個的參考
def add_fruit(inventory, fruit, quantity=0):
inventory[fruit] = inventory.get(fruit, 0) quantity
>>> new_inventory = {}
>>> add_fruit(new_inventory,'strawberry',10)
>>> add_fruit(new_inventory,'strawberry',90)
>>> new_inventory
{'strawberry': 100}
這是正在發生的事情的更完整示例
>>> def foo(value):
... print(f"initial value: {id(value)}")
... value["a"] = 1 # mutate original dict
... print(f"mutated value: {id(value)}")
... value = {"b": 2} # re-use the name for another ref
... print(f"changed name: {id(value)}")
...
>>> input_value = {}
>>> foo(input_value) # the id() calls show value differs!
initial value: 132972815809856
mutated value: 132972815809856
changed name: 132972815874112
>>> input_value # only the original reference is changed!
{'a': 1}
uj5u.com熱心網友回復:
在這個特定的用例中,盡管在函式內部使用inventory引數是不必要的,但為了保持add_fruit更加動態和靈活,我無論如何都會保留它。
因此,您可以嘗試:
new_inventory = {}
def add_fruit(inventory, fruit, quantity=0):
if fruit not in inventory.keys():
inventory[fruit] = quantity
else:
inventory[fruit] = quantity
add_fruit(new_inventory, "strawberry", 10)
add_fruit(new_inventory, "strawberry", 90)
print(new_inventory) # {'strawberry': 100}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451064.html
