为啥变量要有作用域呢?
我们在Python里遇到的内置、局部、全局及自由变量,就是说变量的作用域。
语言区分作用域,是为了复用变量名。引入作用域,相当于给变量划分了各自的“隔离区”,在不同”隔离区“里,查找变量变得很容易。
正是因为有了作用域,我们在函数内才可以随意使用变量名,而不担心其与全局变量、其他函数中的变量冲突——因为这两个作用域是分割的。
BASIC语言只有全局变量,你能想象吗?你在一个函数里命名的循环变量i,很可能跟全局变量冲突。写起程序来,举步维艰。且会导致很多修改、检索问题,维护很困难。
Python 有哪些作用域呢?
Python是动态类型语言,变量是在定义的时候赋值的。这句话的意思我们分以下几个方面来理解:
a = 1 赋值时定义变量
from tools import cubie 导入时定义变量 cubie
def fun():pass 定义函数,绑定变量fun
def fun(name=None):pass 定义变量name为函数fun的形式变量(也是局部变量),同时定义函数,绑定便令fun
class Car:pass 定义类,绑定类名Car
以上,我们弄清了变量定义的时刻,下面来看变量的作用域,也就是变量的活动空间怎么规定出来的。
变量作用域取决于其 定义位置。
定义在函数内部的变量、定义在函数声明中的形式参数,视为局部变量。
定义在 .py 文件内的,且函数、类之外的变量,视为全局变量。
定义在函数中,嵌套函数外,且被嵌套函数引用的变量,视为自由变量。
定义在builtin中的变量,视为内置变量。
面对如此复杂的四种变量作用域,用一个例子来说明它们的访问规则。