首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从旧Python版本到Python 3的高阶函数

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

Stack Overflow用户
提问于 2019-02-03 19:13:05
回答 1查看 63关注 0票数 1

有人知道如何将此HOF从早期的Python版本转换为Python 3吗?

代码语言:javascript
复制
apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))

这来自于David的书“:Python中的文本处理”。我无法在Python 3中使用apply函数,因为它已经被废弃了。我尝试过使用func(*args,**kwargs)而不是apply(func,args,kwargs),但是我得到了这个TypeError:'float‘对象是不可迭代的。我还找到了一些说明函数应该返回的内容的注释:https://wiki.python.org/moin/TextProcessingInPython

下面是我对代码的尝试:

代码语言:javascript
复制
apply_each = lambda fns, args=[]: map(fns, *args)
args = [5.4, 6.3, 6.3]
print(list(apply_each(approx, args)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 19:19:15

您可以定义自己的.apply

代码语言:javascript
复制
>>> def apply(f, args):
...     return f(*args)
...
>>> apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))

或者一步一步:

代码语言:javascript
复制
apply_each = lambda fns, args=[]: map(lambda f, args: f(*args), fns, [args]*len(fns))

但是这是糟糕的风格,lambda的唯一优点是它是匿名的,如果您要将它分配给一个名称,这就违背了目的。这是更好的风格:

代码语言:javascript
复制
def apply(f, args):
    return f(*args)

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

所以:

代码语言:javascript
复制
>>> import operator as op
>>> list(apply_each([op.add, op.sub, op.mul, op.truediv], args=[1,2]))
[3, -1, 2, 0.5]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54506540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档