|
发表于 2020-11-15 21:14:34
|
显示全部楼层
本帖最后由 阿奇_o 于 2020-11-15 21:20 编辑
我研究了一下,如果你能理解“自由变量”的概念,非局部变量,也非全局变量,那应该基本理解了,^_
- # 例1、2:略
- # 例3:
- # 关于nonlocal关键字的作用(Py3.x才有,是为了解决...)
- def out():
- v = 1 # 这v是out函数的局部变量,而相对于inn函数,v则是“自由变量”(不是全局变量哦,因为没有global关键字)
- def inn():
- nonlocal v # Py2.x中没有该关键字,使用“闭包”时,只能读取“自由变量”,但不能改写(重新赋值),所以为了解决这个问题,Py3.x 引入了 nonlocal这个关键字,
- v += 1 # 这里不仅引用了自由变量v,而且对它重新赋值(改写了它的值),如果没有上一句,v被优先认为是inn函数的局部变量,而非自由变量,也非全局变量,
- # 这样就导致了不能改写成功(会报错:未绑定 UnboundLocalError: local variable 'v' referenced before assignment 因为被先认为是inn的局部变量,所以要你先声明才能再赋值)
- return v
- return inn
- c = out()
- print(c(), c(), c())
复制代码
故,简而言之,nonlocal关键字的作用是:
使嵌套函数,对“自由变量”同时拥有读和写的权限,虽然自由变量本身不属于其局部变量,也非全局变量。 |
|