Funktionen mit Vorgabewerten

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
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

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.
BlackJack

Der wird nicht verschluckt, Du gibst ja explizit 'Am See 6' als zweites Argument an.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

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.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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 ^^
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

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
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

poste mal den link zu dem seminar.
evtl. irre ich mich ja ...
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Ist ein Buch.
Python 2.x. Das Einsteigerseminar (Taschenbuch) von Martin Uzák

http://www.amazon.de/Python-2-x-Einstei ... 3826672062
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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 :)
Zuletzt geändert von Dill am Freitag 9. März 2007, 17:25, insgesamt 1-mal geändert.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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', '-')
     ...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

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.
Antworten