How to do *args, **kwargs properly
Lasse Vågsæther Karlsen
lasse at vkarlsen.no
Tue Oct 11 07:37:57 EDT 2005
I must be missing something but what is the proper way to do a function
using such arguments ?
Specifically I'm looking for:
- ability to take an unspecified number of "positional arguments"
- ability to take optional named arguments that follows the first arguments
- raise appropriate errors if I use the wrong named arguments
for instance:
fn(1, 2, 3)
fn(1, 2, 3, cmp=lambda x, y: y-x)
fn(1, 2, 3, cpm=lambda x, y: y-x) # TypeError on this
Is the following the way to go ?
def fn(*values, **options):
comparison = cmp
for key, value in options.iteritems():
if key == "cmp":
comparison = value
else:
raise TypeError, "'%s' is an invalid keyword argument for
this function" % key
# rest of function here
or is the "proper python" way simply this:
def fn(*values, **options):
if "cmp" in options: comparison = options["cmp"]
else: comparison = cmp
# rest of function here
and thus ignoring the wrong parameter names?
--
Lasse Vågsæther Karlsen
http://usinglvkblog.blogspot.com/
mailto:lasse at vkarlsen.no
PGP KeyID: 0x2A42A1C2
More information about the Python-list
mailing list