a helper for generating a function for reading keywords in
    interface functions with a dictionary with defaults

    expects the defaults dictionary to have keywords you request.

    example:
    defaults = dict(a='a',b=3);
    def bigfunc(**kw):
        getkw=mk_getkw(kw,defaults);

        # I want the callers' `a', or the default if s/he doesn't
        # supply it
        a=getkw('a');
        c = [a]*getkw('b');
        return c,c[0]; 

    Option:
        prefer_passed -- use "l in kw" only, not test.

def mk_getkw(kw, defaults,prefer_passed=False):
    '''
    a helper for generating a function for reading keywords in
    interface functions with a dictionary with defaults

    expects the defaults dictionary to have keywords you request.

    example:
    defaults = dict(a='a',b=3);
    def bigfunc(**kw):
        getkw=mk_getkw(kw,defaults);

        # I want the callers' `a', or the default if s/he doesn't
        # supply it
        a=getkw('a');
        c = [a]*getkw('b');
        return c,c[0]; 

    Option:
        prefer_passed -- use "l in kw" only, not test.
    '''
    def getkw(*ls):
        r = [ kw[l] if test(kw,l) else defaults[l]
              for l in ls ];
        if len(r) == 1: return r[0];
        return r;
    def getkw_prefer_passed(*ls):
        r = [ kw[l] if l in kw else defaults[l]
              for l in ls ];
        if len(r) == 1: return r[0];
        return r;
    return getkw if not prefer_passed else getkw_prefer_passed;