Normalizing arguments

Steve Holden steve at holdenweb.com
Fri Oct 17 12:13:51 EDT 2008


Dan Ellis wrote:
> Given some function, f(a, b, c=3), what would be the best way to go
> about writing a function, g(f, *args, **kwargs), that would return a
> normalized tuple of arguments that f would receive when calling
> f(*args, **kwargs)? By normalized, I mean that the result would always
> be (a, b, c) regardless of how g was called, taking into account
> positional arguments, keyword arguments, and f's default arguments.
> 
> g(f, 1, 2, 3) -> (1, 2, 3)
> g(f, 1, 2, c=3) -> (1, 2, 3)
> g(f, 1, c=3, b=2) -> (1, 2, 3)
> g(c=3, a=1, b=2) -> (1, 2, 3)
> g(1, 2) -> (1, 2, 3)
> 
> All the required information is available between args, kwargs and f
> (the function object), but I don't know the exact algorithm. Has
> anyone already done this, or should I just dig around in the CPython
> source and extract an algorithm from there?

You'd get a lot further a lot faster by looking at the documentation for
the inspect module instead.

Here's your starter for 10 ...

>>> def f(a, b, c=3):
...   pass
...
>>> inspect.getargspec(f)
(['a', 'b', 'c'], None, None, (3,))
>>>

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list