有人知道如何将该HOF从先前的Python版本转换为Python 3吗?
apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))
这来自David Mertz的《 Python中的文本处理》一书。 由于已弃用Python 3,因此我无法使用apply函数。 我试过使用func(* args,** kwargs)代替apply(func,args,kwargs),但是我遇到了这个TypeError:'float'对象是不可迭代的。 我还发现了那些说明该函数应返回的内容的注释: https://wiki.python.org/moin/TextProcessingInPython
这是我尝试的代码:
apply_each = lambda fns, args=[]: map(fns, *args)
args = [5.4, 6.3, 6.3]
print(list(apply_each(approx, args)))
答案 0 :(得分:1)
您可以定义自己的.apply
:
>>> def apply(f, args):
... return f(*args)
...
>>> apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))
或者一劳永逸:
apply_each = lambda fns, args=[]: map(lambda f, args: f(*args), fns, [args]*len(fns))
但是这是糟糕的样式,lambda的唯一优点是它是匿名的,如果您要将其分配给一个名称,则会违背目的。这是更好的样式:
def apply(f, args):
return f(*args)
def apply_each(fns, args=()):
return map(apply, fns, [args]*len(fns))
所以:
>>> import operator as op
>>> list(apply_each([op.add, op.sub, op.mul, op.truediv], args=[1,2]))
[3, -1, 2, 0.5]