Seite 1 von 1

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

Verfasst: Dienstag 22. Dezember 2015, 15:52
von NoPy
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.

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

Verfasst: Dienstag 22. Dezember 2015, 16:03
von cofi
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

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

Verfasst: Dienstag 22. Dezember 2015, 16:08
von 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.