python-函数的命名空间和作用域
一、命名空间1、命名空间的定义2、命名空间的分类3、命名空间的加载、取值顺序
二、作用域1、作用域的定义作用域的LEGB法则
一、命名空间
1、命名空间的定义
命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典,
用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量
的值。
2、命名空间的分类
1、每个函数都有着自已的命名空间,叫做 局部命名空间,它记录了函数的变量,
包括函数的参数和局部定义的变量。
2、每个模块拥有它自已的命名空间,叫做 全局命名空间,它记录了模块的变量,
包括函数、类、其它导入的模块、模块级的变量和常量。
3、还有就是 内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。
3、命名空间的加载、取值顺序
命名空间的加载顺序是: 内置===>全局===>局部 取值顺序与加载顺序刚好相反: 局部===>全局===>内置
二、作用域
1、作用域的定义
作用域指的是变量在程序中的可应用范围。
作用域的LEGB法则
作用域按照变量的定义位置可以划分为4类即LEGB:
Local(函数内部)局部作用域。
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)。
Global(模块全局)全局作用域。
Built-in(内建)内建作用域。(指的是builtins.py模块)
a
= 1
def outer():
b
= 2
def innter():
c
= 3
print(c
)
print(b
)
print(a
)
print(max)
innter
()
outer
()
运行结果:
LEGB法则的运行时, 如果在Local(局部)中找的到变量就会使用local中的变量,
如果找不到就会在Enclosing(嵌套函数)中去找, 如果找到使用该变量,如果
找不到就在Global(全局)中去找,找到使用该变量, 找不到就继续在Bulit-in
(内置)中查找, 找到使用, 找不到报错。