Jon Clements wrote:

I'm not sure this'll catch on, it'll be interesting to see other
comments.
However, I believe you can get the behaviour you desire something
like:

import inspect

class AllArgs(object):
    def __init__(self, func):
        self._func = func
        self._spec = inspect.getargspec(func)
        self._nposargs = len(self._spec.args)
    def __call__(self, *args, **kwdargs):
        self._func.func_globals['Args'] = (args[self._nposargs:],
kwdargs)
        return self._func(*args[:self._nposargs])

@AllArgs
def test():
    print Args

@AllArgs
def test2(a, b):
    print a, b, Args

test(1, 2, 3, 4, 5, a=3, b=5)
test2(1, 2, 3, 4, 5, c=7)

Done quickly, probably buggy, but does provide 'Args', but without
further work
swallows any *'s and **'s and might ignore defaults (hideously
untested)

Thank you for your interest, Jon.

According to http://docs.python.org/library/inspect.html we have that func_globals is the global namespace in which this function was defined.

Hence we have
>>> def f(): pass
...
>>> f.func_globals is globals()
True
>>> f.func_globals ['x'] = 3
>>> x
3
>>>

I don't yet understand what your code is intended to do, but I'm fairly sure you're not wishing to 'monkey-patch' a global namespace of a module.

--
Jonathan
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to