K
kj
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.
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.