How to access args as a list?
Tim Chase
python.list at tim.thechases.com
Sat Apr 3 19:20:34 EDT 2010
kj wrote:
>
>
> Suppose I have a function with the following signature:
>
> def spam(x, y, z):
> # etc.
>
> Is there a way to refer, within the function, to all its arguments
> as a single list? (I.e. I'm looking for Python's equivalent of
> Perl's @_ variable.)
It sounds like you want the "*" operator for arguments:
def foo(*args):
print "Args:", repr(args)
print " Type:", type(args)
for i, arg in enumerate(args):
print " Arg #%i = %s" % (i, arg)
foo(1)
foo("abc", "def", 42)
# pass a list as args
lst = [1,2,3]
foo(*lst)
There's also a keyword form using "**":
def foo(*args, **kwargs):
print "Args:", repr(args)
print " Type:", type(args)
print "Keyword Args:", repr(kwargs)
print " Type:", type(kwargs)
for i, arg in enumerate(args):
print " Arg #%i = %s" % (i+1, arg)
for i, (k, v) in enumerate(kwargs.items()):
print " kwarg #%i %r = %s" % (i+1, k, v)
foo(1, "hello", something="Whatever", baz=42)
# pass a list and a dict:
lst = [1,2,3]
dct = {100:10, 200:11}
foo(*lst, **dct)
Both prevent introspection, so if you want the auto-generated
help to populate with named arguments, you'd have to use the
inspection method you're currently using. But generally, if you
want to be able to treat the args as lists/tuples/dicts, you
don't care about the names given.
-tim
More information about the Python-list
mailing list