【问题标题】:Does this combinator have a name?这个组合器有名字吗?
【发布时间】:2011-11-08 15:35:58
【问题描述】:

这个函数 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?这是某种组合器吗?

【问题讨论】:

    标签: python function combinators


    【解决方案1】:

    组合子是applycurried 形式。与(已弃用的)内置函数 apply 相比,f 颠倒了参数的顺序以更有用,提供看起来像 functools.partial 函数的对偶。

    【讨论】:

    • partial 的区别(可能可以忽略不计)可以使用额外传递的其他参数来调用。
    • 我已经重写了这个,以纠正我最初误读的问题。
    【解决方案2】:

    它与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
    

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 2013-04-21
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2022-11-18
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多