Python: некоторая функция для args -> * args (аналогично функциям в functools) - PullRequest
2 голосов
/ 23 ноября 2010

У меня были следующие реализации:

def vecAdd(v1, v2): return tuple(map(add, izip(v1,v2)))
def vecMul(v1, f): return tuple(map(mul, izip(v1,repeat(f))))

Это не сработало, потому что addmul) вызывается как add((x,y)), то есть он получает только один единственный аргумент.

Есть ли какая-нибудь функция, которая в основном выполняет следующее?

def funccaller_with_exposed_args(func):
    return lambda args: func(*args)

Возможно, в этом случае это излишне и чрезмерно эффективно, но в целом это может быть очень важно с точки зрения производительности, если в противном случае вы могли бы выложить полный тяжелый цикл в чистый код C.

1 Ответ

5 голосов
/ 23 ноября 2010

Вы можете сделать это с помощью 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...