首先对于闭包计数器函数:
def createCounter(): i=[0] def counter(): i[0]+=1 return i[0] return counter
闭包的意思是当创建一个新的函数并指向createCounter()时,比如:counterA = createCounter(),
createCounter()
counterA = createCounter()
相当于执行了i=[0]并且counterA进一步指向了内部函数counter,在执行counterA()时相当于
i=[0
counterA
counter
counterA()
直接执行了createCounter()内部的counter(),所以:
counter()
>>> counterA = createCounter()
>>> counterA()
相当于执行:
>>> i=[0]
>>> i[0] = counter(i)
至于为何要用i=[0]而不是直接用i=0,
i=[0]得到一个list,改变list中的值,就像三个娃的爹每年都涨一岁,虽然变老了,但还是三个娃的爹呀!
i=0得到一个单纯的变量,改变i相当于重新赋值,就像老大都换一个年长一岁的人当他爹,但另外兄弟俩不认啊!除非他用nonlocal喊一句:这是咱共同的新爹!
如果有理解不对的地方,希望您能指出!
Sign in to make a reply
HellPlay
首先对于闭包计数器函数:
闭包的意思是当创建一个新的函数并指向
createCounter()
时,比如:counterA = createCounter()
,相当于执行了
i=[0
]并且counterA
进一步指向了内部函数counter
,在执行counterA()
时相当于直接执行了
createCounter()
内部的counter()
,所以:>>> counterA = createCounter()
>>> counterA()
>>> counterA()
>>> counterA()
相当于执行:
>>> i=[0]
>>> i[0] = counter(i)
>>> i[0] = counter(i)
>>> i[0] = counter(i)
至于为何要用i=[0]而不是直接用i=0,
i=[0]得到一个list,改变list中的值,就像三个娃的爹每年都涨一岁,虽然变老了,但还是三个娃的爹呀!
i=0得到一个单纯的变量,改变i相当于重新赋值,就像老大都换一个年长一岁的人当他爹,但另外兄弟俩不认啊!除非他用nonlocal喊一句:这是咱共同的新爹!
如果有理解不对的地方,希望您能指出!