Paul,

Python does not allow mixing variable length arguments and keyword arguments in 
that way. To accomplish what you want, you must add an argument preceded by a 
"**" which will be a dict containing all of the keyword arguments as key, value 
pairs. You then have to retrieve the arguments from the dict by name. When 
called, the keyword arguments must be last.

Here is a little example:

def test(*column_definitions, **options):
    print "Column Definitions:" + ", ".join(column_definitions)
    output_csv_filename = options.get('output_csv_filename', None)
    print "Output csv filename: " + str(output_csv_filename)


>>> test("kundennummer", "anrede", "vorname", "nachname", "plz", "ort", 
>>> "adresse", "kontoinhaber", "blz", "kto", "bankname", "status", 
>>> "spielbeginn", "letzte_aenderung", "importdatum", "briefdatum", 
>>> "buchungsdatum", "stornodatum", output_csv_filename=None)
Column Definitions:kundennummer, anrede, vorname, nachname, plz, ort, adresse, 
kontoinhaber, blz, kto, bankname, status, spielbeginn, letzte_aenderung, 
importdatum, briefdatum, buchungsdatum, stornodatum
Output csv filename: None

Greg


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]
Sent: Monday, March 10, 2008 9:19 AM
To: python tutor
Subject: [Tutor] passing arguments to functions - problem with argument order

I don't get this - what is the clean way of the order of passing 
arguments to functions?

The called function goes like this:

def csvwriter(output_csv_filename=None, *coloumn_definitions):
         """Edit Me!"""
         if output_csv_filename == None:
                 output_csv_filename = raw_input("Name der zu 
erzeugenden Datei (vollständiger Pfad)? (ACHTUNG: WIRD ÜBERSCHRIEBEN, 
FALLS VORHANDEN!) ")
         first_row = ";".join(coloumn_definitions)
         print(first_row)
         try:
                 file = open(output_csv_filename, "w")
                 file.writerow(first_row)
                 file.close()
         except Exception, e:
                 print("Konnte %s nicht zum Schreiben öffnen.")
                 sys.exit(e)
         return csv.writer(open(output_csv_filename, "ab"), 
delimiter=";", quoting=csv.QUOTE_NONE)


The call to the function seems impossible to do. When I say:

                 writer = dgf.csvwriter(output_csv_filename=None, 
"kundennummer", "anrede", "vorname", "nachname", "plz", "ort", 
"adresse", "kontoinhaber", "blz", "kto", "bankname", "status", 
"spielbeginn", "letzte_aenderung", "importdatum", "briefdatum", 
"buchungsdatum", "stornodatum")

I get:

SyntaxError: non-keyword arg after keyword arg

-> So I guess I have to put keyword arg at the end...

When I put output_csv_writer at the end:

                 writer = dgf.csvwriter("kundennummer", "anrede", 
"vorname", "nachname", "plz", "ort", "adresse", "kontoinhaber", "blz", 
"kto", "bankname", "status", "spielbeginn", "letzte_aenderung", 
"importdatum", "briefdatum", "buchungsdatum", "stornodatum", 
output_csv_filename=None)

I get:

TypeError: csvwriter() got multiple values for keyword argument 
'output_csv_filename'

-> Am I right that output_csv_filename now becomes "kundennummer" at first?



Also, changing the function definition gives me syntax error:

     def csvwriter(*coloumn_definitions, output_csv_filename=None):
                                                           ^
SyntaxError: invalid syntax



What's going on here? I'm confused...


Paul
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to