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/ -- http://mail.python.org/mailman/listinfo/python-list