Function arguments

Thomas Heller thomas.heller at ion-tof.com
Thu Oct 18 10:28:58 CEST 2001


Call me weird, but sometimes I need functions taking a number of
positional arguments, some named arguments with default values, and
other named arguments as well.

Something like this (which does _not_ work):

def function(*args, defarg1=None, defarg2=0, **kw):
    ...

The usual way to program this is:

def function(*args, ***kw):
    if kw.has_key('defarg1'):
        defarg1 = kw['defarg1']
        del kw['defarg1']
    else:
        defarg1 = None

    if kw.has_key('defarg2'):
        defarg1 = kw['defarg2']
        del kw['defarg2']
    else:
        defarg2 = 0

    # ...process the positional arguments in args
    # ...process the remaining named arguments in kw

Doesn't look very pretty IMO, and using the dictionaries'
get method doesn't help.

I was thinking of a popitem() dictionary method taking
(optionally) 2 arguments: the name of the item to pop,
and the default value to return if the item is not present
in the dictionary:

>>> d = {'a': 2, 'b': 3}
>>> d.popitem('defarg', 0)
0
>>> d
{'a': 2, 'b': 3}
>>> d.popitem('a', 100)
2
>>> d
{'b': 3}
>>>

Opinions?

Thomas






More information about the Python-list mailing list