У этого комбинатора есть имя? - PullRequest
6 голосов
/ 08 ноября 2011

Эта функция f принимает список аргументов и возвращает другой вызываемый объект с тем же списком аргументов, чтобы к нему могли быть применены другие функции.

from operator import add, mul

def f(*a, **kw):
    return lambda g: g(*a, **kw)

map(f(3, 10), (add, mul))  # -> [13, 30]

Что вы называете f? Это какой-то комбинатор?

Ответы [ 2 ]

4 голосов
/ 08 ноября 2011

Комбинатор представляет собой карри форму применимо .По сравнению со (устаревшей) встроенной функцией apply, f меняет порядок аргументов, чтобы быть более полезным, обеспечивая то, что выглядит как двойственное для функции functools.partial .

0 голосов
/ 08 ноября 2011

Это довольно тесно связано с partial, но не то же самое.

partial принимает функцию и некоторые аргументы и возвращает вызываемый объект, который вызывает данный вызываемый элемент с объединенными параметрами.

def pr(x): print (x) # making it fit for 2.x and 3.x

p = functools.partial(pr, 1, 2, 3)
p() # prints 1, 2, 3

q = f(1, 2, 3)
p(pr) # prints 1, 2, 3
...