def create_counter():
d = {'counter' : 0}
def return_next_value():
d['counter'] = d['counter']+1
return d['counter']
return return_next_value
my_counter = create_counter()
my_counter()
Out[71]: 1
my_counter()
Out[72]: 2
my_counter()
Out[73]: 3
counter2 = create_counter()
counter2()
Out[71]: 1
counter2()
Out[72]: 2
counter2()
Out[73]: 3
each closure has its own states
每次重新开始
def create_counter():
d = {'counter' : 0}
def return_next_value():
d['counter'] = d['counter']+1
return d['counter']
def return_prev_value():
d['counter'] = d['counter']-1
return d['counter']
return {'next':return_next_value, 'prev':return_prev_value}
#my_counter = create_counter()
# my_counter['next']()
*在closure里为何用dict / list?
reference type: 储存值还是reference
def stack():
d = []
def push(num):
d.insert(0,num)
#can't use d = d+[num], because d is a adress and not addable
return d
return push
can't use d = d+[num], because d is a adress and not addable (list 的特性)