在python中创建一个加法累加器

时间:2014-03-30 09:13:58

标签: python

所需要的是

    def accumulator():
        def addition():
             something here 
             and others
        return addition

,其中

A = accumulator()

A(10) 
10
A(10)
20

使用消息传递使得每个累加器()将在末尾具有总和。

我不知道如何开始。 。 。如果你能提供帮助我真的很感激! 感谢

3 个答案:

答案 0 :(得分:3)

另一种变体,带有闭包。

def accumulator():
    sum = 0
    def addition(n):
         nonlocal sum
         sum += n
         return sum
    return addition

答案 1 :(得分:2)

不确定这是否是您所要求的,但您可以通过更新类变量来获得所需的效果。

class accumulator(object):
    summation = 0
    def __call__(self,val):
        accumulator.summation+=val
        print accumulator.summation

A = accumulator()
A(10)
A(10)
B = accumulator()
B(10)
B(100)

这将给出:

10
20
30
130

并且每个实例在summation属性中都具有正确的值。

如果您想将AB的摘要分开:

class accumulator(object):
    def __init__(self):
        self.summation = 0
    def __call__(self,val):
        self.summation+=val
        print self.summation

答案 2 :(得分:2)

你可以定义一个协程,正如Aशwiniचhaudhary建议的那样:

def coroutine(func):
    """
    http://www.python.org/dev/peps/pep-0342/
    http://www.dabeaz.com/coroutines/index.html
    """
    def wrapper(*args, **kw):
        gen = func(*args, **kw)
        gen.send(None)
        return gen
    return wrapper

@coroutine
def accumulator():
    val = 0
    while True:
        val += (yield val)

可以这样使用:

A = accumulator().send
print(A(10))
# 10

print(A(10))
# 20

print(A(10))
# 30