加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用python中的装饰器将f(x)转换为f([x])

发布时间:2020-12-20 11:21:12 所属栏目:Python 来源:网络整理
导读:class foo(object): def __init__(self,f): self.f = f def __call__(self,args_list): def wrapped_f(args_list): return [self.f(*args) for args in args_list] return wrapped_f(args_list)if __name__=='__main__': class abc(object): @foo def f(a,b,
class foo(object):
        def __init__(self,f):
                self.f = f
        def __call__(self,args_list):
                def wrapped_f(args_list):
                        return [self.f(*args) for args in args_list]
                return wrapped_f(args_list)

if __name__=='__main__':

        class abc(object):
                @foo
                def f(a,b,c):
                        return a+b+c

        a = range(5)
        b = range(5)
        c = range(5)
        data = list(zip(a,c))
        print(abc.f(data))

几年前我写了这篇文章.当你用@foo装饰任何函数f(X)时,它就变成了
f(X列表).

这个过程叫什么?它是什么?它的函数式编程名称是什么?

它没有cur.我知道简单的map9(f,X列表)可以做到.

什么是装饰/装饰操作数学?

解决方法

在您的原始函数上执行了两个转换:

>它从三个参数的函数转换为一个三元组的函数
>从3元组的函数转换为采用3元组列表的函数

第一次转型
在Haskell中,有一个名为uncurry的函数,记录为here.(这是一个双参数版本; 3-,4-,……版本也可以轻松创建).

第二次转型
同样在Haskell中,有一组功能,其名称中有升力. Here’s关于Haskell wiki关于提升的页面.我认为该页面比我能解释得更好:

Lifting is a concept which allows you to transform a function into a   
corresponding function within another (usually more general) setting.

因此,在您的情况下,您正在提升函数,从操作元组到操作元组列表.

笔记:

> OP要求装饰器的数学名称.我不知道会是什么,但我听说Haskell应该像可执行数学一样,所以我认为Haskell的术语是一个很好的起点.因人而异.> OP要求提供这些流程的FP名称.我不知道,但我认为Haskell的术语是可以接受的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读