Python作用域
查找规则:LEGB
区分 global 和 nonlocal 作用域声明:
global:
global使得作用域查找从上层的模块的作用域开始;
允许通过引用模块中的变量,从而修改其指向对象的值,即支持重新对变量进行赋值;
如果名称不存在于模块中,作用域查找继续到内置作用域(builtins模块);
切记对全局名称的赋值总是在模块的作用域中创建或者修改它们;
nonlocal:
nonlocal限制作用域查找只是嵌套的def;
要求变量名称必须已经存在于上层的def中;
允许对他们进行赋值,即修改他们,但不支持赋值创建!
作用域查找不会继续到全局或内置作用域;
区分三个概念:
引用:通过变量名引用其所指向的对象实体
修改型赋值:通过变量名找到其所指向的对象实体,并做原处修改操作(可变对象),对于不可变对象,则会新创建一个对象实体,并修改该变量名的指向
创建型赋值:新创建一个对象,并将该名称指向此对象