从旧Python版本高阶函数到Python 3

问题描述 投票:1回答:1

有谁知道如何从以前版本的Python这HOF转换到Python 3?

apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))

这来自于本书名为:文字处理在Python由戴维·梅茨。我不能够使用应用功能在Python 3,因为它已被弃用。我已经使用FUNC(* ARGS,** kwargs),而不是应用(FUNC,ARGS,kwargs)试过,但我得到这个类型错误: '浮动' 对象不是可迭代。我还发现那些表现出什么样的功能,应该返回笔记: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)))
python lambda
1个回答
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))

但是,这是作风差,拉姆达的唯一好处是,它是匿名的,如果你打算把它分配给一个名字,那失败的目的。这是更好的方式:

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]
© www.soinside.com 2019 - 2024. All rights reserved.