所期望的是,以在python製作加法累加器
def accumulator():
def addition():
something here
and others
return addition
使用消息傳遞,使得每個累加器()將具有在端部整體總和
其中
A = accumulator()
A(10)
10
A(10)
20
。
我不知道如何開始。 。 。如果你能幫上忙,我會非常感激! 謝謝
所期望的是,以在python製作加法累加器
def accumulator():
def addition():
something here
and others
return addition
使用消息傳遞,使得每個累加器()將具有在端部整體總和
其中
A = accumulator()
A(10)
10
A(10)
20
。
我不知道如何開始。 。 。如果你能幫上忙,我會非常感激! 謝謝
只是另一個變種,封閉。
def accumulator():
sum = 0
def addition(n):
nonlocal sum
sum += n
return sum
return addition
只是想知道,但爲什麼我不能只使用沒有「非本地」的總和? – user3251511
不知道這是你問的問題,但你可以通過更新一個類變量來獲得所需的效果。
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
你可以定義一個協程,爲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
你使用什麼版本:Python 2或Python 3?如果你使用Python 3,你可以通過關閉來完成。 – HYRY
@HYRY我使用Python 3 – user3251511
你能編輯你的問題並完成你的句子嗎? 「使用消息傳遞」,從什麼?你在你的例子中使用這個函數就像一個對象,你是否需要寫一個對象Accumulator? –