How to access args as a list?

kj at
Mon Apr 5 20:49:08 CEST 2010

In <4bb802f7$0$8827$c3e8da3 at> Steven D'Aprano <steve at> writes:

>On Sat, 03 Apr 2010 22:58:43 +0000, 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.)

>Does this help?

>>>> def spam(a, b, c=3, d=4):
>...     pass
>>>> spam.__code__.co_varnames
>('a', 'b', 'c', 'd')

That's very handy.  Thanks!

>The hardest part is having the function know its own name.

Indeed.  Why Python does not provide this elmentary form of
introspection as a built-in variable is extremely puzzling to me
(even--no, *more so*--after reading PEP 3130).

>I see that you are already using the inspect module. That almost 
>certainly is the correct approach. I'd be surprised if inspect is too 
>heavyweight, but if it is, you can pull out the bits you need into your 
>own function.

That's a good idea.  Thanks!


More information about the Python-list mailing list