Discuss / Python / 解释一下自己的看法 2021/1/4:

解释一下自己的看法 2021/1/4:

Topic source

HellPlay

#1 Created at ... [Delete] [Delete and Lock User]

首先对于闭包计数器函数:

def createCounter():
    i=[0]
    def counter():
        i[0]+=1
        return i[0]
    return counter

闭包的意思是当创建一个新的函数并指向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喊一句:这是咱共同的新爹!


如果有理解不对的地方,希望您能指出!


  • 1

Reply