所需要的是
def accumulator():
def addition():
something here
and others
return addition
,其中
A = accumulator()
A(10)
10
A(10)
20
使用消息传递使得每个累加器()将在末尾具有总和。
我不知道如何开始。 。 。如果你能提供帮助我真的很感激! 感谢
答案 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
属性中都具有正确的值。
如果您想将A
和B
的摘要分开:
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