Normalizing arguments

Discussion in 'Python' started by Dan Ellis, Oct 17, 2008.

  1. Dan Ellis

    Dan Ellis Guest

    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?
    Dan Ellis, Oct 17, 2008
    #1
    1. Advertising

  2. Dan Ellis

    Steve Holden Guest

    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/
    Steve Holden, Oct 17, 2008
    #2
    1. Advertising

  3. Dan Ellis

    Dan Ellis Guest

    On Oct 17, 5:13 pm, Steve Holden <> 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.
    Dan Ellis, Oct 17, 2008
    #3
  4. Dan Ellis

    Chris Rebert Guest

    On Fri, Oct 17, 2008 at 8:37 AM, 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?
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >


    Why do you want/need this magical g() function considering that, as
    you yourself point out, Python already performs this normalization for
    you?

    Cheers,
    Chris
    --
    Follow the path of the Iguana...
    http://rebertia.com
    Chris Rebert, Oct 17, 2008
    #4
  5. Dan Ellis

    Dan Ellis Guest

    On Oct 17, 6:17 pm, "Chris Rebert" <> 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
    Dan Ellis, Oct 17, 2008
    #5
  6. On Oct 17, 12:37 pm, Dan Ellis <> wrote:
    > On Oct 17, 6:17 pm, "Chris Rebert" <> 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


    George Sakkis has a recipe that might help.

    http://code.activestate.com/recipes/551779/

    It was discussed here:

    http://groups.google.com/group/comp...4/31357f9cb4c7bdeb?lnk=st&q=#31357f9cb4c7bdeb
    Aaron \Castironpi\ Brady, Oct 17, 2008
    #6
  7. Dan Ellis

    Dan Ellis Guest

    Dan Ellis, Oct 19, 2008
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris

    Method for normalizing URL?

    Chris, Jan 10, 2005, in forum: Java
    Replies:
    6
    Views:
    1,113
    Chris Smith
    Jan 12, 2005
  2. Ryan Stewart

    Normalizing XHTML with XML

    Ryan Stewart, May 11, 2006, in forum: XML
    Replies:
    3
    Views:
    408
    Ryan Stewart
    May 11, 2006
  3. Stu

    Normalizing tm structure past 2038

    Stu, Oct 31, 2003, in forum: C Programming
    Replies:
    5
    Views:
    425
    Chris Torek
    Nov 1, 2003
  4. Replies:
    1
    Views:
    368
    Joshua Cranmer
    Apr 9, 2007
  5. Thomas Wittek

    XSLT: Normalizing namespaces

    Thomas Wittek, Aug 30, 2007, in forum: XML
    Replies:
    5
    Views:
    1,147
    Martin Honnen
    Aug 31, 2007
Loading...

Share This Page