7.13. nonlocal 语句

  1. nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*

nonlocal 语句会使得所列出的名称指向之前在最近的包含作用域中绑定的除全局变量以外的变量。 这种功能很重要,因为绑定的默认行为是先搜索局部命名空间。 这个语句允许被封装的代码重新绑定局部作用域以外且非全局(模块)作用域当中的变量。

global 语句中列出的名称不同,nonlocal 语句中列出的名称必须指向之前存在于包含作用域之中的绑定(在这个应当用来创建新绑定的作用域不能被无歧义地确定)。

nonlocal 语句中列出的名称不得与之前存在于局部作用域中的绑定相冲突。

参见

  • PEP 3104 - 访问外层作用域中的名称
  • 有关 nonlocal 语句的规范说明。