为什么inventory[dragon_loot[n]]
== inventory[added_items[n]]
,在以下代码中?
def display_inventory(inventory):
print('Inventory:')
items = 0
for k, v in inventory.items():
print(str(v) + ' ' + str(k))
items += v
print('Total number of items: ' + str(items))
def add_to_inventory(inventory, added_items):
for n in range(len(added_items)):
inventory.setdefault(added_items[n], 0)
inventory[dragon_loot[n]] += 1 ----> # or 'inventory[added_items[n]] += 1' the same effect
return display_inventory(inventory)
stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
dragon_loot = ['rope', 'gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
add_to_inventory(stuff, dragon_loot)
答案 0 :(得分:0)
您似乎对如何传递参数/参数感到困惑。
看看这个例子。
def my_func(copy_var):
#copy_var=1
print(copy_var)
print(hex(id(copy_var)))
var=1000
print(var)
print(hex(id(var)))
print("----------------------")
my_func(var)
输出:
1000
0x7efd723d9b70
----------------------
1000
0x7efd723d9b70
注意: hex(id(变量))只返回存储在变量中的值的内存地址
注意地址是如何相同的。表示局部变量(仅对函数是局部变量)和全局变量指向同一地址。
然而,copy_var的范围仅在该函数内。当您尝试在外面访问它时。抛出错误。
看一下这个。
def my_func(copy_var):
print(copy_var)
var=1000
print(var)
print("------------------------")
my_func(var)
print(copy_var)
输出:
1000
------------------------
1000
Traceback (most recent call last):
File "/home/mr/argfunc.py", line 7, in <module>
print(copy_var)
NameError: name 'copy_var' is not defined
现在尽可能简单,
def my_func(copy_var):
print(copy_var)
print(var)
var=1000
print(var)
my_func(var)
copy_var
和var
都指向同一地址的值相同。但是,其中一个是应对的,而另一个是全球性的。
注意它们(copy_var和var)如何打印相同的值1000
。这正是您在令人困惑的代码中发生的事情。
所以回到你的身边,因为在这一行
add_to_inventory(stuff, dragon_loot)
dragon_loot
被赋予作为added_items
的功能,因此两者都指向具有相同值的相同地址。但唯一的区别是它们的范围不同。
dragon_loot
- &gt; added_items