能否像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 ...)或需要用于循环?
答案 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)))