Normalizing arguments

Dan Ellis dan at
Fri Oct 17 17:37:11 CEST 2008

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?

More information about the Python-list mailing list