函数中的参数或参数

时间:2017-06-24 03:57:12

标签: python variables parameters arguments process-control

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

1 个答案:

答案 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_varvar都指向同一地址的值相同。但是,其中一个是应对的,而另一个是全球性的。

注意它们(copy_var和var)如何打印相同的值1000。这正是您在令人困惑的代码中发生的事情。

所以回到你的身边,因为在这一行

add_to_inventory(stuff, dragon_loot)

dragon_loot被赋予作为added_items的功能,因此两者都指向具有相同值的相同地址。但唯一的区别是它们的范围不同。

dragon_loot - &gt; added_items