Python,不定参数/多参数,柯里化

本文介绍如何在Python中使用面向对象特性实现柯里化,通过定义add类及其__init__、__call__和__str__方法,展示了一种类似JavaScript的函数式编程技巧。

需要用到面向对象里的__init__,__call__,__str__三种魔法函数,可以跟JavaScript一样完美的柯里化

class add:

    def __init__(self, *args):
        self.value = sum(args)

    def __call__(self, *args):
        self.value += sum(args)
        return self

    def __str__(self):
        return str(self.value)

if __name__ == '__main__':
    print(add())
    # 0
    print(add(1)(2))
    # 3
    print(add(1, 2)(3)(4))
    # 10
    print(add()(1, 2)(3, 4)()(5)(6, 7, 8)(9, 10)()) 
    # 55
柯里化是一种函数式编程的概念,它指的是将一个接受多个参数的函数转化为一系列只接受单个参数的函数的过程。在Python中,可以通过使用闭包或者装饰器来实现柯里化。 闭包是指在一个内部函数中引用了外部函数的变量,并且该内部函数可以在外部函数调用结束后继续访问这些变量。通过使用闭包,我们可以实现柯里化。下面是一个使用闭包实现柯里化的示例: ```python def add(x): def inner(y): return x + y return inner add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,`add` 函数接受一个参数 `x`,并返回一个内部函数 `inner`。内部函数 `inner` 接受参数 `y`,并返回 `x + y` 的结果。通过调用 `add(5)`,我们得到了一个新的函数 `add_5`,它只需要一个参数 `y`,并且会将 `x` 固定为 5。这样,我们就实现了柯里化。 除了使用闭包,还可以使用装饰器来实现柯里化。下面是一个使用装饰器实现柯里化的示例: ```python def curry(func): def inner(*args): if len(args) >= func.__code__.co_argcount: return func(*args) return inner return inner @curry def add(x, y): return x + y add_5 = add(5) print(add_5(3)) # 输出 8 ``` 在上面的例子中,我们定义了一个装饰器 `curry`,它接受一个函数 `func` 作为参数,并返回一个新的函数 `inner`。新的函数 `inner` 接受任意数量的参数 `args`,如果参数个数足够,则调用原始函数 `func` 并返回结果;否则,返回自身。通过在 `add` 函数上应用装饰器 `@curry`,我们实现了柯里化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值