Discuss / Python / 有个地方不太明白

有个地方不太明白

Topic source
def create_counter():    x = 0    def counter():        nonlocal x        x += 1        return x    return counter
counterA = create_counter()  
# 如果这里 counterA = create_counter()
print(counterA(), counterA(),counterA(),counterA())  # 结果是 1,2,3,4
print(create_counter()(),create_counter()(),create_counter()(),create_counter()())  # 结果是 1,1,1,1
为什么这两种打印的结果的结果会不一样呢?


counterA = create_counter()

counterA表示一个函数,这个函数是由create_counter()返回的,当不断执行counterA()时,也就是在不断执行这个函数

但是不断执行create_counter()()时,相当于不断定义生成了新的函数,执行的永远是第一步的返回结果。两者的差别就是一个是一个函数的不断运行,一个是不断生成新的函数,然后运行了新函数的第一步。

最直观的解释,就是

print(create_counter()(),create_counter()(),create_counter()(),create_counter()())

相当于

counterA=create_counter()
counterB=create_counter()
counterC=create_counter()
counterD=create_counter()
print(counterA, counterB, counterC, counterD)

更正一下,最后一句

print(counterA(), counterB(), counterC(), counterD())

  • 1

Reply