Frage zu einem Beispiel aus dem Tutorial

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MuMPiTz
User
Beiträge: 27
Registriert: Freitag 27. Juli 2018, 15:07

Hallo,

folgendes Beispiel:
def cheeseshop(kind, *arguments, **keywords):
print("-- Haben sie", kind, "?")
print("-- Tut mir leid,", kind, "ist leider gerade aus.")
for arg in arguments:
print(arg)
print("-" * 40)
keys = sorted(keywords.keys())
for kw in keys:
print(kw, ":", keywords[kw])


Wird aufgerufen mit:
cheeseshop("Limburger", "Der ist sehr flüssig, mein Herr.",
"Der ist wirklich sehr, SEHR flüssig, mein Herr.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")


Gibt aus:
-- Haben sie Limburger ?
-- Tut mir leid, Limburger ist leider gerade aus.
Der ist sehr flüssig, mein Herr.
Der ist wirklich sehr, SEHR flüssig, mein Herr.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch

Meine Frage bezieht sich ausschließlich auf den blauen Teil: Ich verstehe nicht ganz, was das Programm hier macht. Ich versuche mal die Zeilen nach meinem Verständnis im Code durchzugehen:

1) **keywords: Wird im Tutorial als ein Parameter beschrieben, der als eine art Wörterbuch fungiert. Also quasi eine Variable, der z.B. ein String oder ein Integer zugewiesen wird, richtig? Also z.B.
a = 1 oder wie im Beispiel, "client="John Cleese", etc.

Also von den 3 Keywords wäre eines "client="john Cleese", richtig?

2) Weiter im Code: keys = sorted(keywords.keys())
Ich weiß nicht genau, was diese Line macht, außer dass sie die Eingabe von **keywords alphabetisch sortiert!? Da ich wissen wollte, was "keys" definiert, habe ich
an dieser Stelle den Rest des Codes entfernen und durch: print(keys) ersetzt, das Ergebnis:
['client', 'shopkeeper', 'sketch']


3)for kw in keys:
print(kw, ":", keywords[kw])


Nun, das irritiert mich am meisten: "kw" ist ein Element in "keys". Wenn "keys" nun 'client', 'shopkeeper' und 'sketch' sind, wo kann sich dann darin noch der Rest verstecken? Was genau bedeutet keywords[kw]? Ist
Keywords eine liste und [kw] ein Index? Sorry, ich kapiers einfach nicht :/
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

`keywords` ist ein Wörterbuch in `kw` ein Schlüssel darin. **keywords speichert die zusätzlichen Schlüsselwort-Argumente des Funktionsaufrufs in dieses Wörterbuch, ähnlich wie *args alle nicht bei der Funktionsdefinition angegebenen positionalen Argumente in einer Liste speichert.
MuMPiTz
User
Beiträge: 27
Registriert: Freitag 27. Juli 2018, 15:07

Sirius3 hat geschrieben: Mittwoch 8. August 2018, 22:23 `keywords` ist ein Wörterbuch in `kw` ein Schlüssel darin. **keywords speichert die zusätzlichen Schlüsselwort-Argumente des Funktionsaufrufs in dieses Wörterbuch, ähnlich wie *args alle nicht bei der Funktionsdefinition angegebenen positionalen Argumente in einer Liste speichert.
danke, ich versteh leider immer noch nicht, was "kw" sein soll.

also als beispiel: **keywords:
client='John Cleese'
-> ist eines von den 3 keywords, richtig?

nun wird eine variable "keys" von keywords definiert, diese wäre in diesem Fall "client" von "keys" aus "client='John Cleese'" aus "keywords, richtig?

als letztes wird dann eine variable "kw" aus "keys" definiert: Was sollte das sein wenn nur noch "client" übrig ist?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MuMPiTz: `kw` ist jeweils der aktuelle Schlüssel in der Schleife. `keywords` ist ein Wörterbuch, also vom Typ `dict`. Vergiss mal einen Augenblick wie das zustande gekommen ist und betrachte den Code einfach nur unter dem Aspekt das `keywords` ein Wörterbuch mit Schlüsseln und Werten ist. Falls das nicht reicht, schau Dir noch mal Wörterbücher im Tutorial an. Falls das danach kommt, arbeite das Tutorial weiter durch bis Wörterbücher dran waren und komm dann noch einmal zu dieser Stelle hier zurück.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
MuMPiTz
User
Beiträge: 27
Registriert: Freitag 27. Juli 2018, 15:07

Okay, vielen Dank, werde ich machen! :)
Antworten