I have a function that takes 3 keyword parameters. It has default values for x and y and I would like to call the function for different values of z using map. When I run the code below I get the following error:
foo() got multiple values for keyword argument 'x'
def foo(x =1, y = 2, z = 3):
print 'x:%d, y:%d, z:%d'%(x, y, z)
if __name__ == '__main__':
f1 = functools.partial(foo, x= 0, y = -6)
zz = range(10)
res = map(f1, zz)
map(f1, zz) tries to call the function
f1 on every element in
zz, but it doesn't know with which arguments to do it.
map will try to reassign
x because it uses positional arguments.
To counter this you can either use a simple list comprehension as in @mic4ael's answer, or define a lambda inside the
res = map(lambda z: f1(z=z), zz)
Another solution would be to change the order of the arguments in the function's signature:
def foo(z=3, x=1, y=2):