Normalizing arguments
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
Re: Normalizing arguments
On Oct 17, 5:13 pm, Steve Holden <[EMAIL PROTECTED]> wrote: > You'd get a lot further a lot faster by looking at the documentation for > the inspect module instead. Yeah, I've looked at that already, but it only gives (in a nicer way) the information I already have from the function object and its code object. -- http://mail.python.org/mailman/listinfo/python-list
Re: Normalizing arguments
On Oct 17, 6:17 pm, "Chris Rebert" <[EMAIL PROTECTED]> wrote: > Why do you want/need this magical g() function considering that, as > you yourself point out, Python already performs this normalization for > you? A caching idea I'm playing around with. @cache def some_query(arg1, arg2): # Maybe do SQL query or something return result cache returns a function that does: - Make a key from its arguments - If key is in the cache: - Return result from cache - If it isn't: - Call some_query with the same arguments - Cache and return the result -- http://mail.python.org/mailman/listinfo/python-list
Re: Normalizing arguments
On Oct 17, 7:16 pm, "Aaron \"Castironpi\" Brady" <[EMAIL PROTECTED]> wrote: > George Sakkis has a recipe that might help. > > http://code.activestate.com/recipes/551779/ Looks like just the thing. Thanks! -- http://mail.python.org/mailman/listinfo/python-list