第二十讲课后第6题 闭包求助
def funX():x = 5
def funY():
nonlocal x
x += 1
return x
return funY
a = funX()
print(a())
print(a())
print(a())
会打印:
6
7
8
如何理解“当a=funX()的时候,只要a变量没有被重新赋值,funX()就没有被释放,也就是说局部变量x没有被重新初始化” 这句话,这样做有什么优点? 这感觉有点像C里的static关键字修饰的变量——他有局部变量的特性,访问受限制的,但是又有全局变量的特性——生命周期伴随整个程序。
好处就是:
1、安全且生命周期长。
2、外层函数为内层函数服务——简单说,外层函数通过修改配置信息让内层函数得出不同的结果,
本来参数是“并列的关系”,可以修改为“嵌套的关系”
详情请看,我的这个帖子:
我对闭包的几点初步认识 个人理解:当a=funX()的时候返回的是一个函数类型的对象 这个函数类型的对象在全局域里每次print()时 是在这个函数类型的对象里赋值执行 此时的funx()只被调用了一次如果当a=funX()再一次赋值这时就相当于在调用函数funx()了 这是所有局部变量全部初始化 小飞鱼oo 发表于 2016-4-1 15:19
个人理解:当a=funX()的时候返回的是一个函数类型的对象 这个函数类型的对象在全局域里每次print() ...
这样做的优点就是可以保护这个x不会初始化 也不会随便被外部所访问 而改变这个变量
呵呵 看一下 路过 看看咯 看看咯 啦啦啦啦 学习了 不用重复写代码重复引用 直接用a代表一个函数Python的原则简单 也遇到这个问题,谢谢了 为什么我还是没看懂??? 首先a没有重新赋值,函数不会初始化;内嵌函数return了x的值,所以每一次调用函数,x的值会被上一次的运算结果覆盖
页:
[1]