On Oct 9, 3:48 am, Bruno Desthuilliers <bruno. [EMAIL PROTECTED]> wrote: > Aaron "Castironpi" Brady a écrit : > > > > > Hello, > > > The 'inspect' module has this method: > > > inspect.getargvalues(frame) > > > It takes a frame and returns the parameters used to call it, including > > the locals as defined in the frame, as shown. > > >>>> def f( a, b, d= None, *c, **e ): > > ... import inspect > > ... return inspect.getargvalues( inspect.currentframe() ) > > ... > >>>> f( 0, 1, 'abc', 'def', ( 3, 2 ), h= 'ghi' ) > > (['a', 'b', 'd'], 'c', 'e', {'a': 0, 'c': ('def', (3, 2)), 'b': 1, > > 'e': {'h': 'g > > hi'}, 'd': 'abc', 'inspect': <module 'inspect' from 'C:\Programs > > \Python26\lib\in > > spect.pyc'>}) > > > However, if you wanted a decorator that examines the parameters to a > > function, you're out of luck. By the time you have a frame, you're > > already in the function. > > Hem... > > def decorator(func): > def _decorator(*args, *kw): > print "func args are ", *args, **kw > return func(*args, **kw) > return _decorator
It is less of a problem without tuple unpacking, but you still have code like: if len( args )>= 2: b= args[ 1 ] else: try: b= (somehow check b's default val.) except NoDefaultVal: raise ArgumentError Worse yet, you have it for each parameter. Unless I missed something, this is the only way to mimic/recreate the signature of the decoratee. -- http://mail.python.org/mailman/listinfo/python-list