我有这些实现:
def vecAdd(v1, v2): return tuple(map(add, izip(v1,v2)))
def vecMul(v1, f): return tuple(map(mul, izip(v1,repeat(f))))
这些不起作用,因为add
(和mul
)被称为add((x,y))
,即它只获得一个参数。
是否有一些功能基本上可以做到以下几点?
def funccaller_with_exposed_args(func):
return lambda args: func(*args)
在这种情况下,这可能是过度杀伤和过度工作,但总的来说,如果你能在整个纯C代码中完成一个完整的重循环,这可能是非常重要的性能。
答案 0 :(得分:5)
您可以使用itertools.starmap或itertools.imap执行此操作。
imap
与starmap
类似,不同之处在于它首先会压缩参数。
因此,您可以使用izip
:
imap
import itertools as it
def vecAdd(v1, v2): return tuple(it.imap(add, v1, v2))
def vecMul(v1, f): return tuple(it.imap(mul, v1, it.repeat(f)))