我有一个带有3个关键字参数的函数。它具有x和y的默认值,我想使用map来为z的不同值调用该函数。当我运行下面的代码时,出现以下错误:
foo()为关键字参数'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)
Run Code Online (Sandbox Code Playgroud)
有没有解决该问题的Python方法?
map(f1, zz)尝试f1在中的每个元素上调用该函数zz,但它不知道使用哪个参数来执行该函数。partial重新定义foo,x=0但map会尝试重新分配,x因为它使用位置参数。
为了解决这个问题,您可以使用@ mic4ael的答案中的简单列表理解,也可以在map:中定义一个lambda :
res = map(lambda z: f1(z=z), zz)
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是更改函数签名中参数的顺序:
def foo(z=3, x=1, y=2):
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2811 次 |
| 最近记录: |