|
发表于 2020-11-9 14:09:57
|
显示全部楼层
本楼为最佳答案
本帖最后由 jackz007 于 2020-11-9 14:26 编辑
- def funX():
- x = 5 # 这个 x
- def funY():
- nonlocal x # 这个 x
- x += 1 # 这个 x
- return x # 这个 x
复制代码
所谓“没有被释放”指的是:在语句
被执行过后,函数 funX() 的局部变量 x 会在下面的语句
- print(a())
- print(a())
- print(a())
复制代码
被执行的过程中一直保持存在(函数调用过后,x 的值一直保持,下一次调用时,上一次的值还在)
在这种关系中,x 是和 a 绑定的,只要 a 不消失,x 的值就会一直被保持,只要考察一下下面的代码就可以更加清楚:
- def funX():
- x = 5
- def funY():
- nonlocal x
- x += 1
- return x
- return funY
- a = funX()
- b = funX()
- c = funX()
- print('-b =' , -b())
- print('a = ', a())
- print('a = ', a())
- print('a = ', a())
- print('-b =' , -b())
- print('-b =' , -b())
- print('-b =' , -b())
- print('a = ', a())
- print('c = ', c())
- print('c = ', c())
复制代码 |
|