4.2.1. 名称的绑定
名称 用于指代对象。 名称是通过名称绑定操作来引入的。
以下构造会绑定名称:传给函数的正式形参,import
语句,类与函数定义(这会在定义的代码块中绑定类或函数名称)以及发生以标识符为目标的赋值,for
循环的开头,或 with
语句和 except
子句的 as
之后。 import
语句的 from ... import *
形式会绑定在被导入模块中定义的所有名称,那些以下划线开头的除外。 这种形式仅在模块层级上被使用。
del
语句的目标也被视作一种绑定(虽然其实际语义为解除名称绑定)。
每条赋值或导入语句均发生于类或函数内部定义的代码块中,或是发生于模块层级(即最高层级的代码块)。
如果名称绑定在一个代码块中,则为该代码块的局部变量,除非声明为 nonlocal
或 global
。 如果名称绑定在模块层级,则为全局变量。 (模块代码块的变量既为局部变量又为全局变量。) 如果变量在一个代码块中被使用但不是在其中定义,则为 自由变量。
每个在程序文本中出现的名称是指由以下名称解析规则所建立的对该名称的 绑定。