Seite 1 von 1
Funktionen mit Vorgabewerten
Verfasst: Donnerstag 8. März 2007, 23:59
von PmanX
Hallo,
ein kleines Beispiel.
Code: Alles auswählen
>>> def my_firma(firma, delim = "-", *adresse, **inventar):
... print firma
... print delim * len(firma)
... for a in adresse:
... print a
... else:
... print "\nInventar:"
... for o in inventar.keys():
... print inventar[o], o
...
>>> my_firma('Die Firma', 'Am See 6', '12345 Musterstadt', Stuhl=4, Tisch=1)
Die Firma
Am See 6Am See 6Am See 6Am See 6Am See 6Am See 6Am See 6Am See 6Am See 6
12345 Musterstadt
Inventar:
1 Tisch
4 Stuhl
Warum wird mein Vorgabewert verschluckt?
Gruß P.
Verfasst: Freitag 9. März 2007, 00:15
von BlackJack
Der wird nicht verschluckt, Du gibst ja explizit 'Am See 6' als zweites Argument an.
Verfasst: Freitag 9. März 2007, 00:28
von PmanX
BlackJack hat geschrieben:Der wird nicht verschluckt, Du gibst ja explizit 'Am See 6' als zweites Argument an.
Bedeutet: ich kann den Vorgabewert nicht weglassen, wenn ein Tupel folgt?
Wo finde ich die komplette Syntax dazu? Ich finde nur Teile davon.
Verfasst: Freitag 9. März 2007, 09:29
von Sr4l
my_firma('Die Firma', 'Am See 6', '12345 Musterstadt', Stuhl=4, Tisch=1)
Die Firma wird firma zugeordnet
Am See 6 wird delim zugeordnet
usw.
was spricht dagegen delim als 'konstate' zusetzen
Bsp.:
Code: Alles auswählen
def my_firma(firma, *adresse, **inventar):
... delim = "-"
... print firma
...
..
Oder wenn du deinen Code beibehalten willst:
Code: Alles auswählen
my_firma('Die Firma','-', 'Am See 6', '12345 Musterstadt', Stuhl=4, Tisch=1)
Es tut mir leid wenn meine Bsp. nicht funzen ich habe hier kein Python zZ.
**edit**
Sorry ich habe dein Text nochmal gelesen du hast ja die Frage gestellt ob du den Vorgabewert nicht weg lassen kannst wenn ein Tuppel folgt.
Naja ich lasse es trozdem so stehen ^^
Verfasst: Freitag 9. März 2007, 10:48
von Dill
um argumente weglasssen zu können musst du keyword-arguments verwenden.
das geht aber nicht bei argument-tupeln (*adresse) oder argument-maps (**inventar).
du müsstest also adresse und inventar explizit als tupel und map übergeben.
und beim aufruf dann auch keywords benutzen:
Code: Alles auswählen
>>> def test(a="a", b="b", c=()):
... print a,b
... for x in c:
... print x
...
>>> test("a","b",(1,2,3))
a b
1
2
3
>>> test(b="b",c=(1,2,3))
a b
1
2
3
Verfasst: Freitag 9. März 2007, 12:17
von PmanX
Hallo,
Dill hat geschrieben:um argumente weglasssen zu können musst du keyword-arguments verwenden.
das geht aber nicht bei argument-tupeln (*adresse) oder argument-maps (**inventar).
du müsstest also adresse und inventar explizit als tupel und map übergeben.
und beim aufruf dann auch keywords benutzen:
...
Danke, das leuchtet ein. Komischerweise war das Beispiel aus einem Einsteigerseminar.
happy weekend
Verfasst: Freitag 9. März 2007, 13:45
von Dill
poste mal den link zu dem seminar.
evtl. irre ich mich ja ...
Verfasst: Freitag 9. März 2007, 14:04
von PmanX
Ist ein Buch.
Python 2.x. Das Einsteigerseminar (Taschenbuch) von Martin Uzák
http://www.amazon.de/Python-2-x-Einstei ... 3826672062
Verfasst: Freitag 9. März 2007, 15:03
von Dill
dann liege entweder ich falsch (kann sein).
oder der herr Martin Uzák.
oder du hast ihn falsch verstanden.
evtl. schaut sich das hier nochmal ein crack an und wir wissen mehr

Verfasst: Freitag 9. März 2007, 17:22
von birkenfeld
So wie im OP angegeben geht das jedenfalls nicht.
Positional Arguments (also die, die ohne Keyword übergeben werden), werden den Parametern immer von links nach rechts zugeordnet.
Es wird aber in Python 3000 "keyword-only arguments" geben. Mit denen und dieser Signatur:
Code: Alles auswählen
def my_firma(firma, *adresse, delim = "-", **inventar):
würde dein Code wie gewünscht funktionieren.
Heute kannst du das auch schon emulieren, indem du etwa so etwas schreibst:
Code: Alles auswählen
def my_firma(firma, *adresse, **inventar):
delim = inventar.pop('delim', '-')
...
Verfasst: Freitag 9. März 2007, 17:41
von Leonidas
Dill hat geschrieben:oder der herr Martin Uzák.
Ich tippe mal auf ihn - das Buch im speziellen habe ich nicht, aber die Serie ist nicht so toll. Habe das DANTE-Review zum LaTeX-Einsteigerseminar gelesen 8sehr schwach) und habe auch selber das Ruby-Buch (ebenso schwach).
Verfasst: Freitag 9. März 2007, 18:58
von PmanX
Hallo,
es war das einzige, was meine Bibliothek führt

Dafür 100derte Bücher der letzten Tipps/Tricks/geheime .. von Wintendo.
Vieles ist kurz und schlüssig. Preis/Leistung sehr gut.
nothing is perfect.
Gruß P.