2016-12-11 1 views
0

Ich versuche, ein Wörterbuch an eine Funktion zu übergeben, so dass es der erste Parameter der Funktion ist, und diese Typüberprüfung tritt auf, um zu überprüfen, dass ein Wörterbuch tatsächlich übergeben worden ist.Übergabe eines Wörterbuchs als Parameter zwischen Funktionen in Python?

fridge = {"cheese":10, "milk":11, "feta":12, "cream":21, "onion":32, "pepper":14} 

def fridge_validation(fridge): 
    if not isinstance (fridge,dict) : 
     raise TypeError: ("require a valid dictionary to be submitted!") 

Ich dachte, das folgende funktionieren würde ....

def dummy (fridge): 

return fridge 

test_of_dummy=dummy ({"cheese", "milk", "eggs"}) 

print (test_of_dummy) 

{'eggs', 'milk', 'cheese'} (this was what was printed) 

Nicht ganz sicher, ob ich es richtig gemacht haben? Auch .... Ich bin durch folgendes verwirrt.

def dummy (fridge): 
    fridge={} 
    return fridge 





    test_of_dummy=dummy ({"cheese", "milk", "eggs"}) 
    print (test_of_dummy) "{}" was outputted... 

.

aber ich dachte, ich hätte die Variablen bereits weitergegeben ...? Warum hat das {} scheinbar Vorrang vor dem test_of_dummy?

Betreffs, was ich versuche, ein Wörterbuch Kühlschrank als 1. Parameter einer Funktion aufgerufen zu tun ....

1) Pass. Verwenden Sie isinstance und type error, um zu bestätigen, dass das Wörterbuch tatsächlich ein Wörterbuch ist.

2) eine zweite Funktion, die aus dem Kühlschrank Wörterbuch

Antwort

1

Um Ihre fridge Variable zu validieren Sie diesem Beispiel folgen können:

fridge = {"cheese":10, "milk":11, "feta":12, "cream":21, "onion":32, "pepper":14} 

def fridge_validation (fridge = {}): 
    # Test if fridge is a dict type 
    if not isinstance(fridge, dict): 
     # if fridge isn't a dict type, throw an exception 
     raise TypeError("require a valid dictionary to be submitted!") 
    # if fridge is a dict type return it. So you got your validation 
    else: 
     return fridge 

validation = fridge_validation(fridge) 
print(validation) 

Ausgang:

{'milk': 11, 'feta': 12, 'onion': 32, 'cheese': 10, 'pepper': 14, 'cream': 21} 

ist jedoch {"cheese", "milk", "eggs"} ein set type und kein dict type.

Sie können es überprüfen, indem Python interpreter mit:

>> a = {"cheese", "milk", "eggs"} 
>> type(a) 
<class 'set'> 

So wie Sie sehen, {"cheese", "milk", "eggs"} ist ein set kein dict. Also, wenn Sie es in Ihre fridge_validation() übergeben, wird Ihr Code eine Ausnahme auslösen.

Auch in Ihrer Methode:

def dummy(fridge): 
    fridge = {} 
    return fridge 

Die Rückkehr wird immer gleich {} sein, das ist eine leere dict type die Ursache Ihr Code wird immer Ihren Kühlschrank Wert durch einen leeren dict überschreiben.

Eine Antwort auf Ihre zweite Frage.

Wie können Sie Werte von Ihrem Diktat subtrahieren?Die Antwort ist einfach:

Ich vermute, Sie haben ein Diktat nach der Validierung mit Ihrer fridge_validation() Methode. Zum Beispiel:

validation = {"cheese":10, "milk":11, "feta":12, "cream":21, "onion":32, "pepper":14} 

So:

print(validation["cheese"]) 

Ausgang:

10 

auch:

print(validation["milk"]) 

Ausgabe:

11 

Und so weiter für den Rest. Um Werte von einem Diktat zu subtrahieren, können Sie Folgendes verwenden: dictionary["key"] Dies gibt den Wert des Schlüssels aus.

Auch ich empfehle Ihnen, diese tutorial zu lesen, um zu verstehen, wie Sie mit python dicts umgehen können.

1

Hinweis subtrahieren: {"cheese", "milk", "eggs"} ist ein Satz.

In Ihrer ersten Funktion geben Sie einfach das Argument zurück, also ist es keine Überraschung, was Sie bekommen haben. In der zweiten setzen Sie fridge auf eine leere Menge, bevor Sie es zurückgeben, so erhalten Sie eine leere Menge zurückgegeben.

All dies scheint eher unnötig, was genau willst du tun, und was meinst du, du kannst das Wörterbuch nur einmal bearbeiten?

+0

Ich entschuldige mich dafür, dass ich das Wörterbuch nur einmal bearbeiten kann. Das war ein Fehler. Im Wesentlichen hatte ich eine Funktion geschrieben, um den Kühlschrank Wörterbuch zu nehmen, löschen Sie einen Schlüssel. Ich habe die beiden Programme durcheinander gebracht, mein Schlechter. Es ist 4 Uhr morgens hier. Was ich versuche zu tun .... 1) Übergeben Sie ein Wörterbuch namens Kühlschrank als der 1. Parameter zu einer Funktion. Verwenden Sie isinstance und type error, um zu bestätigen, dass das Wörterbuch tatsächlich ein Wörterbuch ist. 2) Haben Sie eine zweite Funktion, die aus dem Kühlschrank Wörterbuch subtrahieren wird. – apronedsamurai

+0

@Iluvavatar, Sie haben angegeben, dass {"Käse", "Milch", "Eier"} ein Satz ist, ist das, weil ich kein some_name = vorausgegangen habe? – apronedsamurai

+0

'{" Schlüssel1 ":" Wert1 "," Schlüssel2 ":" Wert2 "}' ist ein Diktat, weil Sie Schlüssel und Werte darin haben. '{" value1 "," value2 "}' ist eine Menge, weil es keine Schlüssel gibt, nur Werte. – Iluvatar

Verwandte Themen