Namespace
显式指定名称空间的语句
global
The global
statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without global
, although free variables may refer to globals without being declared global.
Names listed in a global
statement must not be used in the same code block textually preceding that global
statement.
Names listed in a global
statement must not be defined as formal parameters or in a for
loop control target, class
definition, function definition, import
statement, or variable annotation.
global
is a directive to the parser. It applies only to code parsed at the same time as the global
statement. In particular, a global
statement contained in a string or code object supplied to the built-in exec()
function does not affect the code block containing the function call, and code contained in such a string is unaffected by global
statements in the code containing the function call. The same applies to the eval()
and compile()
functions.
nonlocal
The nonlocal
statement causes the listed identifiers to refer to previously bound variables in the nearest enclosing scope excluding globals. This is important because the default behavior for binding is to search the local namespace first. The statement allows encapsulated code to rebind variables outside of the local scope besides the global (module) scope.
Names listed in a nonlocal
statement, unlike those listed in a global
statement, must refer to pre-existing bindings in an enclosing scope (the scope in which a new binding should be created cannot be determined unambiguously).
Names listed in a nonlocal
statement must not collide with pre-existing bindings in the local scope.