2017-06-24 1 views
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) 
+0

私は確かにあなたの質問の問題は何だ何でください読んで読んで、私は本当にあなたがより明確にすることができ、ここで:(あなたの質問を見つけることができる –

+1

あなたはなぜ求めています???インベントリ[dragon_loot [n]] ==インベントリ[added_items [n]]? – JohnDoe

+0

はい、そうです。 – Tuto

答えて

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 

ヘクス(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 - >added_items