一、命名空间
1 概念:保存对象和值的字典
2 分类
- 局部命名空间:函数内定义内容。
- 全局命名空间:模块级别,当前所有的py文件
- 内置命名空间:解释器级别,内置的方法等
3 访问命名空间
- locals():访问局部命名空间:根据调用的位置有关系
- globals():访问全局命名空间:与调用位置无关
4 加载顺序:从大到小
5 查找顺序:从小到大
# 情形1
id = 10
def func():
id = 20
print(id) # 20
func() #
# 情形2
id = 10
def func():
# id = 20
print(id) # 10
func()
# 情形3
# id = 10
def func():
# id = 20
print(id) # id函数
func()
二、 作用域,局部变量和全局变量
1 概念
作用域:一个对象起作用的范围。
局部变量:仅在函数内部起作用的变量。
全局变量:在整个文件中起作用的变量。
2 作用域分类(LEGB)
-
Local(函数内部)局部作用域
-
Enclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)
-
Global(模块全局)全局作用域
-
Built-in(内建)内建作用域
a = 10
def func():
b = 20
def inner():
c = 30
print(c)
inner()
print(b)
print(a)
问题:作用域和命名空间关系?
作用域是一个或多个命名空间叠加的结果。
注意:
在Python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域。