理解可变数量的参数?

时间:2019-05-31 14:18:39

标签: python dictionary-comprehension

能否像Haskell一样以编程方式构建理解能力以处理可变数量的参数?

例如,如何将词典的外部乘积扩展到两个以上的词典:

def outer(f,g):
    return lambda d1,d2: {f(k1,k2):g(v1,v2) for k1,v1 in d1.items() for k2,v2 in d2.items()}

给出:

d1 = {'a':1, 'b':2}
d2 = {'a':10, 'b':11, 'c':12}

以及这些与变量args一起使用的辅助函数:

def string_join(*arg):
    return ''.join(tuple(arg))

def arg_sum(*arg):
    return sum(tuple(arg))

然后:

outer(string_join,arg_sum)(d1,d2)
  

{'aa':11,'ab':12,'ac':13,'ba':12,'bb':13,'bc':14}

方便理解是否可以扩展到变量arg(d1,d2,d3 ...)或需要用于循环?

1 个答案:

答案 0 :(得分:0)

该语言不直接支持此功能(因为里程表控制流在字节码级别上有很大不同),但是可以通过itertools.product和广泛的*拆包来实现:

def outer1(f,g,e):
  a,b=zip(*e)
  return f(*a),g(*b)
def outer(f,g):
  return lambda *dd: dict(outer1(f,g,e) for e in itertools.product(*(d.items() for x in dd)))