Get actual call signature?

castironpi at gmail.com castironpi at gmail.com
Tue Mar 18 19:20:50 CET 2008


On Mar 18, 5:40 am, Jarek Zgoda <jzg... at o2.usun.pl> wrote:
> Say, I have a function defined as:
>
> def fun(arg_one, arg_two='x', arg_three=None):
>     pass
>
> Is there any way to get actual arguments that will be effectively used
> when I call this function in various ways, like:
>
> fun(5) => [5, 'x', None]
> fun(5, arg_three=['a', 'b']) => [5, 'x', ['a', 'b']]
> fun(5, 'something') => [5, 'something', None]
>
> (et caetera, using all possible mixes of positional, keyword and default
> arguments)
>
> I'd like to wrap function definition with a decorator that intercepts
> not only passed arguments, but also defaults that will be actually used
> in execution.
>
> If this sounds not feasible (or is simply impossible), I'll happily
> throw this idea and look for another one. ;)

It evaluates to a substantial problem.  The combinations include
things that Python disallows, such as double-spec. of keywords and
spec'n of keys w/out a dictionary arg; as well as double-spec'ing of
inspection.  How do you want to access the parameters?  What is the
least redundant way?  P.S.  Does there exist a possible authority who
doesn't want me to post this?

How about an index of value and list/tuple of name?

> def fun(arg_one, arg_two='x', arg_three=None):

> fun(5) => [5, 'x', None]
get_args( fun, 5 )->
 names= [ 'arg_one', 'arg_two', 'arg_three' ]
 vals= [ 5, 'x', None ]

> fun(5, arg_three=['a', 'b']) => [5, 'x', ['a', 'b']]
get_args( fun, 5, arg_three=['a', 'b'] )
 names= [ 'arg_one', 'arg_two', 'arg_three' ]
 vals= [ 5, 'x', ['a', 'b'] ]

> fun(5, 'something') => [5, 'something', None]
get_args( fun, 5, 'something' )->
 names= [ 'arg_one', 'arg_two', 'arg_three' ]
 vals= [ 5, 'something', None ]




More information about the Python-list mailing list