从旧版Python到python3的高阶函数

2024-09-28 20:51:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道如何将这个HOF从以前版本的Python翻译成python3吗?你知道吗

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

这本书的题目是:davidmertz的Python文本处理。 我不能在python3中使用apply函数,因为它已经被弃用了。 我试过使用func(*args,**kwargs)而不是apply(func,args,kwargs),但是我得到了这个类型错误:“float”对象是不可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)))

Tags: lambda函数版本maplenargspython3kwargs
1条回答
网友
1楼 · 发布于 2024-09-28 20:51:46

您可以定义自己的.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]

相关问题 更多 >