[英]Python: How to use the “sum” function to calculate the sum of numbers in a list?
[英]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.