Seite 1 von 1
"Sternchenvariablen" und Dekoratoren
Verfasst: Donnerstag 2. März 2006, 11:02
von Francesco
Hallo Leute,
ich habe zwei Fragen:
1) Wie ist das mit den "Sternchenvariablen"
(habe in der Python Dokumentation keine ausreichende Information gefunden)
oft sieht man
def myfunction (*arg, **kwargs)
und wie ruft man das auf?
2) Dekoratoren:
Weiss wer eine Seite, wo das gut beschrieben ist?
mit sinnvollen Anwendungsbeispiel?
Oder kann irgendwer von Euch sagen, dass er das schon
mal angewendet hat und für ihn/ihr nützlich war?
Danke.
Verfasst: Donnerstag 2. März 2006, 11:33
von jens
Zu 1.:
Code: Alles auswählen
def test(*args, **kwargs):
print "args:", args
print "kwargs:", kwargs
test("eins", "zwei", drei=3, vier=4)
Ausgabe:
args: ('eins', 'zwei')
kwargs: {'drei': 3, 'vier': 4}
Das erklärt alles, oder?
Verfasst: Donnerstag 2. März 2006, 11:38
von Francesco
Noch etwas:
Die Verwendung von *sorted ist mir hier nicht klar.
(Weiss nicht mehr von wo ich das herhab).
sort list with another list
Code: Alles auswählen
>>> A=['hello','there','this','that']
>>> B=[3,4,2,5]
>>> zip(*sorted(zip(B,A)))[1]
('this', 'hello', 'there', 'that')
Code: Alles auswählen
e = sorted(zip(B,A))
e
[(2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that')]
*e entspricht dann:
wenn ich schreibe:
Code: Alles auswählen
>>> tuple(e)
((2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that'))
zip(tuple(e))[1]
dann funktioniert es wieder nicht
mit
Code: Alles auswählen
zip((2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that'))[1]
schon (was auch *e anscheinend entspricht).
Verfasst: Donnerstag 2. März 2006, 16:59
von Joghurt
Bei
wird f mit a als parameter aufgerufen
Bei
wird f als
aufgerufen.
Das * kannst du nicht emulieren (außer durch eval etc.), sonst wäre es ja auch sinnfrei.
(OK, mit apply geht es, das war früher die Methode, für die nun * eingeführt wurde)
Verfasst: Donnerstag 2. März 2006, 19:43
von Francesco
Joghurt hat geschrieben:Bei
wird f mit a als parameter aufgerufen
Bei
wird f als
aufgerufen.
Das * kannst du nicht emulieren (außer durch eval etc.), sonst wäre es ja auch sinnfrei.
(OK, mit apply geht es, das war früher die Methode, für die nun * eingeführt wurde)
Joghurt, danke für deine Erklärung.
