0

为什么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)
4

1 回答 1

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(variable))只是返回存储在变量中的值的内存地址

注意地址是如何相同的。意味着局部变量(仅对函数是局部的)和全局变量都指向相同的地址。

但是 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-->added_items

于 2017-06-24T04:48:31.350 回答