这个函数 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
什么?这是某种组合器吗?
这个函数 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
什么?这是某种组合器吗?
组合器是apply的咖喱形式。与(不推荐使用的)内置函数相比,颠倒参数的顺序以使其更有用,提供看起来像对偶的functools.partial函数。apply
f
它与 密切相关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