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