was genau bedeutet ** in print("a={a}, b={b} and f={f}".format(**locals()))

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
Benutzeravatar
NoPy
User
Beiträge: 158
Registriert: Samstag 28. Dezember 2013, 12:39

Hi, das Ergebnis ist mir bekannt:

Code: Alles auswählen

print("a={a}, b={b} and f={f}".format(**locals()))
führt dazu, dass die Wörterbucheinträge in der Formatierung genommen werden.
Aber ich kann mir nicht erklären, warum.

Code: Alles auswählen

print("a={a}, b={b} and f={f}".format(a=3, b=10, f=print)
sorgt dafür, dass a, b und c dort hineingewürgt werden

wenn ich aber will, dass der Inhalt aus einem Wörterbuch genommen wird, also

Code: Alles auswählen

wb = {'Antwort' = 42, 'Gruss' = 'Hallo'}
#so klappt es, wie erwartet
print("{Gruss} Welt, die Antwort lautet {Antwort}".format(**wb)
#liefert nicht das erwartete Ergebnis
print("{Gruss} Welt, die Antwort lautet {Antwort}".format(wb)
Daher meine Frage: Was genau bewirken die beiden Sterne? Das sieht zwar nach c- Pointer- Dereferenzierung aus, aber das kann es ja nicht sein, da die Adressen/Zeiger ja in python nicht explizit verwendet werden.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nun, wenn man herausfinden will was etwas bedeutet, kann man die Dokumentation und vor allem ihren Index bemuehen. Das gilt im Besonderen fuer Zeichen: https://docs.python.org/3/genindex-Symbols.html

Dort findet man dann auch folgendes im Tutorial verlinkt: https://docs.python.org/3/tutorial/cont ... ment-lists
BlackJack

@NoPy: Ist die Bedeutung gerade bei diesem Beispiel nicht offensichtlich? Die beiden Sternchen bedeuten das der Inhalt des Arguments als Schlüsselwort-Argumente übergeben werden. Ohne die beiden Sterchnen ist `wb` das erste Positionsargument und da sollte man nicht erwarten dass da etwas anderes als ein Fehler kommt weil in der Zeichenkette für dieses Argument kein '{}' oder '{0}' als Platzhalter steht wo das Wörterbuch als Zeichenkettendarstellung formatiert wird.

`*` und `**` bei Funktionsaufrufen werden übrigens in der Python-Dokumentation erklärt. Über den Index (oben rechts) und da dann „Symbols“, bei „*“ dem Link „in function calls“ folgen. Etwas leichter verdaulich wird es im Tutorial in der Python-Dokumentation beschrieben.
Antworten