gpt4 book ai didi

python - 从旧 Python 版本到 Python 3 的高阶函数

转载 作者:行者123 更新时间:2023-12-01 08:22:56 24 4
gpt4 key购买 nike

有谁知道如何将此 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com