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

标签 python lambda

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

相关文章:

python - 在python 3中制作 'byte type object'

python - 合并来自不同文件夹的图像并将其存储到另一个文件夹

python - 在 Pytorch 中重复张量的特定列

c# - Lambda 表达式 LINQ 等同于 SQL Exists Query on Same Table/Variable

python - 这是在 python 中标记 csv 文件以转换为 json 文件的最佳方法

python - 如何使用 python 设计巴特沃斯滤波器并指定截止频率为 0.1 Hz?

node.js - 我可以根据每个请求更改我的 AWS Lambda 的公共(public) IP 吗?

Java lambda 聚合器

c++ - 初始化和 lambda 类型参数

java - 像 C++ 风格的函数指针一样使用 Java Lambdas?