有谁知道如何将此 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' object is not iterable。 我还发现了这些注释,显示了该函数应该返回的内容: 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)))
最佳答案
您可以定义自己的.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]
关于python - 从旧 Python 版本到 Python 3 的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506540/