On Fri, Mar 25, 2011 at 2:30 AM, Paddy <paddy3...@googlemail.com> wrote: > Hi, I just found the following oddity where for function fsf1 I am forced to > use a named parameter for correct evaluation and was wondering why it doesn't > work, yet the example from the docs of wrapping int to create basetwo doesn't > need this? > The example: > >>>> from functools import partial >>>> basetwo = partial(int, base=2) >>>> basetwo('10010') > 18 >>>> >>>> def fs(f, s): return [f(value) for value in s] > >>>> def f1(value): return value * 2 > >>>> s = [0, 1, 2, 3] >>>> fs(f1, s) > [0, 2, 4, 6] >>>> >>>> fsf1 = partial(fs, f=f1) >>>> fsf1(s) > Traceback (most recent call last): > File "<pyshell#24>", line 1, in <module> > fsf1(s) > TypeError: fs() got multiple values for keyword argument 'f' >>>> # BUT >>>> fsf1(s=s) > [0, 2, 4, 6] >>>> > > Would someone help? >
If you hand partial a keyword argument, it treats it as a keyword argument. If you want to hand it a positional argument, hand it a positional argument. >>> fsf1 = partial(fs,f1) >>> fsf1(s) [0, 2, 4, 6] -- http://mail.python.org/mailman/listinfo/python-list