python-函数的命名空间和作用域

it2024-03-31  55

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) # L print(b) # E print(a) # G print(max) # B innter() outer()

运行结果:

LEGB法则的运行时, 如果在Local(局部)中找的到变量就会使用local中的变量, 如果找不到就会在Enclosing(嵌套函数)中去找, 如果找到使用该变量,如果 找不到就在Global(全局)中去找,找到使用该变量, 找不到就继续在Bulit-in (内置)中查找, 找到使用, 找不到报错。
最新回复(0)