python中的函数链

今天遇到这样一道题

Create a function add that adds numbers together when called in succession. 
So add(1) should return 1, add(1)(2) should return 1+2, ...
add(1)(2)(3)(4).....

要构造python中的链式函数,目前只想到两种方法:

1.子类化int并定义call

第一种方法是使用定义 call 的自定义 int 子类,它返回一个具有更新值的自身新实例:

class CustomInt(int):
    def __call__(self, v):
        return CustomInt(self + v)

现在可以定义函数 add 以返回一个 CustomInt 实例,该实例作为返回自身更新值的可调用对象,可以连续调用

>>> def add(v): # add = CustomInt 也是可行的
...    return CustomInt(v)
>>> add(1)
1
>>> add(1)(2)
3
>>> add(1)(2)(3)(44)  # and so on..
50

2.定义一个闭包,需要额外调用yeild

def add(v):
    def _inner_adder(val=None):  
        """ 
        if val is None we return _inner_adder.v 
        else we increment and return ourselves
        """
        if val is None:    
            return _inner_adder.v
        _inner_adder.v += val
        return _inner_adder
    _inner_adder.v = v  # save value
    return _inner_adder 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值