How to access args as a list?

MRAB python at mrabarnett.plus.com
Sat Apr 3 19:20:52 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.)
> 
> I'm aware of locals(), but I want to preserve the order in which
> the arguments appear in the signature.
> 
> My immediate aim is to set up a simple class that will allow me to
> iterate over the arguments passed to the constructor (plus let me
> refer to these individual arguments by their names using an
> instance.attribute syntax, as usual).
> 
> The best I have managed looks like this:
> 
> class _Spam(object):
>     def __init__(self, x, y, z): 
>         self.__dict__ = OrderedDict(())
>         for p in inspect.getargspec(_Spam.__init__).args[1:]:
>             self.__dict__[p] = locals()[p]
> 
>     def __iter__(self):
>         return iter(self.__dict__.values())
> 
> 
> but rolling out inspect.getargspec for this sort of thing looks to
> me like overkill.  Is there a more basic approach?
> 
> P.S. this is just an example; the function I want to implement has
> more parameters in its signature, with longer, more informative
> names.
> 
I think the closest approach to what you're asking is to capture the
arguments as a list and then bind them to local names:

     def spam(*args):
         x, y, z = args
         # etc.



More information about the Python-list mailing list