| 
 | 
 
 
发表于 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关键字的作用是: 
使嵌套函数,对“自由变量”同时拥有读和写的权限,虽然自由变量本身不属于其局部变量,也非全局变量。 |   
 
 
 
 |