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 的特性)

results matching ""

    No results matching ""