繁体   English   中英

编写一个函数来计算python中的数字总和,该函数多次被称为sum(1)(2)(3)

[英]Write a function to calculate the sum of numbers in python, which is called many times as sum (1) (2) (3)

您需要在python上编写一个函数,该函数被称为无限次,每次它需要一个数字并返回它们的总和,例如sum(1)(2)(3)==6。我找到了javascript的代码,但是我没有找到如何在python __str __方法中重新定义该功能的方法。 如何覆盖方法或有其他解决方案?

我尝试编写的代码:

def sum(n):
    total = n
    def f(k):
        nonlocal total
        total += k
        # f.__str__ = lambda : print(total) # no
        return f
    return f

print(sum(1)(2)(3))

这是有效的javascript代码:

function sum(a) {

  let currentSum = a;

  function f(b) {
    currentSum += b;
    return f;
  }

  f.toString = function() {
    return currentSum;
  };

  return f;
}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert( sum(6)(-1)(-2)(-3) ); // 0
alert( sum(0)(1)(2)(3)(4)(5) ); // 15

最好使用class而不是内部函数,然后返回该类的对象。 如果使它返回相同的对象,则可以一次又一次使用魔术__call__方法。

def sum(n):
    class Sum(object): 
        def __init__(self, k):
            self.total = k

        def __call__(self, k):
            self.total += k
            return self

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

        def __repr__(self):
            return str(self)

    return Sum(n)

输出量

>>> sum(1)
1
>>> sum(1)(2)
3
>>> sum(1)(2)(3)
6

如果该函数将用作func(a)(b)(c)(d)(...)为什么不只使用func([a,b,c,d,...]) 在这种情况下:

sum([a,b,c,d])

那这个呢:

def summ(a):
    current_sum = a

    return lambda x: current_sum + x

print(summ(1)(2))
>>>3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM