2017-06-24 2 views
0

Warum inventory[dragon_loot[n]] == inventory[added_items[n]], in den folgenden Codes?Parameter oder Argument in Funktion

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

Ich las und las, aber ich kann wirklich Ihre Frage hier nicht finden :(, könnten Sie mehr klar sein, bitte, was in der Tat ist Ihre Frage, was ist das Problem –

+1

Sie fragen, warum? Inventar [dragon_loot [n]] == Inventar [added_items [n]]? – JohnDoe

+0

Ja, das ist es, ich weiß nicht, wie sie gleichwertig sind. – Tuto

Antwort

0

Es scheint, dass Sie ein wenig verwirrt darüber sind, wie Argumente/Parameter übergeben werden.

Schauen Sie sich dieses Beispiel an.

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) 

output:

1000 
0x7efd723d9b70 
---------------------- 
1000 
0x7efd723d9b70 

Hinweis: hex (ID (variable)) gibt nur die Adresse des Speichers des gespeicherten Wertes in einer Variablen

bemerken, wie die Adressen sind gleich. Bedeutet, dass sowohl die lokale Variable (die nur für die Funktion lokal ist) als auch die globale Variable auf dieselbe Adresse zeigen.

Der Umfang von copy_var ist jedoch nur innerhalb dieser Funktion. Wenn Sie versuchen, darauf zuzugreifen. Fehler wird ausgelöst.

Werfen Sie einen Blick auf diese.

def my_func(copy_var): 
    print(copy_var) 
var=1000 
print(var) 
print("------------------------") 
my_func(var) 
print(copy_var) 

Ausgang:

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 

nun so einfach wie ich setzen,

def my_func(copy_var): 
    print(copy_var) 
    print(var) 
var=1000 
print(var) 
my_func(var) 

Beide copy_var und var haben den gleichen Wert auf gleiche Adresse zeigen. Aber der eigene Umgang ist innerhalb der Funktion, während der andere global ist.

Hinweis wie sie beide (copy_var und var) den gleichen Wert 1000 drucken. Genau das passiert in deinem verwirrenden Code.

Also zurück auf Ihr Kommen, da in dieser Linie als added_items so beide auf dieselbe Adresse

add_to_inventory(stuff, dragon_loot) 

dragon_loot gegeben gleiche Werten zu funktionieren. Aber nur Unterschied ist ihre Bereiche sind unterschiedlich.

dragon_loot? ->added_items