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.
"Sternchenvariablen" und Dekoratoren
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Zu 1.:
Ausgabe:
Code: Alles auswählen
def test(*args, **kwargs):
print "args:", args
print "kwargs:", kwargs
test("eins", "zwei", drei=3, vier=4)
Das erklärt alles, oder?args: ('eins', 'zwei')
kwargs: {'drei': 3, 'vier': 4}
Noch etwas:
Die Verwendung von *sorted ist mir hier nicht klar.
(Weiss nicht mehr von wo ich das herhab).
sort list with another list
*e entspricht dann:
wenn ich schreibe:
zip(tuple(e))[1]
dann funktioniert es wieder nicht
mit
schon (was auch *e anscheinend entspricht).
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:
Code: Alles auswählen
(2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that')
Code: Alles auswählen
>>> tuple(e)
((2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that'))
dann funktioniert es wieder nicht
mit
Code: Alles auswählen
zip((2, 'this'), (3, 'hello'), (4, 'there'), (5, 'that'))[1]
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)
Code: Alles auswählen
a=[1,2,3]
f(a)
Bei
Code: Alles auswählen
a=[1,2,3]
f(*a)
Code: Alles auswählen
f(1,2,3)
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.Joghurt hat geschrieben:Beiwird f mit a als parameter aufgerufenCode: Alles auswählen
a=[1,2,3] f(a)
Beiwird f alsCode: Alles auswählen
a=[1,2,3] f(*a)
aufgerufen.Code: Alles auswählen
f(1,2,3)
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)
