Indizieren von Schlüsselwortargumenten mithilfe einer Zeichenfolge in Python

StackOverflow https://stackoverflow.com//questions/24056599

  •  26-12-2019
  •  | 
  •  

Frage

Ich bin mit der Aussage verwirrt „print(kw,:“,keywords[kw])“ im folgenden Programm, in Python.

def cheeseshop(kind,*arguments,**keywords):
    print("--Do you have any",kind,"?")
    print("--I'm sorry, we're all out of",kind)
    for arg in arguments:
       print(arg)
    print("-"*40)
    print(keywords)
    keys=sorted(keywords)
    print(keys)
    for kw in keys:
        print(kw,":",keywords[kw])


cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

Das Ergebnis ist unten:

--Do you have any Limburger ?
--I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
{'client': 'John Cleese', 'sketch': 'Cheese Shop Sketch', 'shopkeeper': 'Michael Palin'}
['client', 'shopkeeper', 'sketch']
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch

Meiner Meinung nach sollte es „kw“ sein „Kunde“, „Skizze“ und „Ladenbesitzer“, keine Zahlen, wie kann „kw“ dann der Index der Schlüsselwörter in der Anweisung sein? „print(kw,:“,keywords[kw])“?

Um meine Idee zu überprüfen, habe ich auch ein anderes Programm ausprobiert:

letters=['a','b']
for kw in letters:
   print(letters[kw])

Und es erscheint eine vernünftige Antwort:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str

Das verwirrt mich außerdem wegen des Problems, das ich im ersten Teil des Programms hatte. Ich denke, es sollte bei mir die gleiche Fehlermeldung angezeigt werden.

War es hilfreich?

Lösung

Funktionsargumente mit vorangestelltem ** werden „Schlüsselwortargumente“ genannt, die beim Aufruf der Funktion benannte Parameter annehmen, z. B.: client="John Cleese" in deinem Beispiel.In diesem Fall ist „client“ der Name und „John Cleese“ der Wert.Auf diese Weise übergebene Argumente werden in a platziert dict, bei dem es sich um einen Schlüsselwertspeicher und nicht um eine Liste handelt, mit der Sie vielleicht aus dem Formular vertraut sind

x = {
      "foo": "bar"
    } 
print x["foo"] # prints "bar"

Andere Tipps

Es ist mit den Hilfsprogrammen der Schlüsselwörter, es ist eine Art Array mit einem Schlüsselnamen.

Sie können die LIB-Beschreibung in der Python-Dokumentation sehen hier

In der Tat gibt es ein spezielle Eigenschaften von **-Keywords-Argumenten, die das Recht dazu belegen, dies zu tun.

hier ist ein Tutorial, um es zu verwenden (und auch zu verstehen) und Hier ist die stapellose Frage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top