Get actual call signature?
castironpi at gmail.com
castironpi at gmail.com
Tue Mar 18 14:20:50 EDT 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