名称空间
- 定义:存放名字和值的绑定关系
- 分类:
- 内置名称空间
python解释器启动的时候产生 - 全局名称空间:文件级别定义的名字
python文件执行的时候产生 - 局部名称空间:函数内部的名字
函数调用时产生
- 执行一个python文件时名称空间产生顺序
内置名称空间—>全局名称空间—>局部名称空间 - 取值时名称空间查找顺序
局部名称空间—>全局名称空间—>内置名称空间
max = 10
def fn():
max = 20
print(max)
fn()
print(max)
作用域
- 定义:名称空间的名字作用的范围
- 分类:
全局作用域:包含内置名称空间和全局名称空间的名字,全局有效
局部作用域:只包含局部名称空间的名字,局部有效
查看全局作用域的名字:globals( )
查看局部作用域的名字:locals( )
name = 'peter'
age = 18
def fn(): pass
def func():
x = 1
print(globals())
print(locals())
func()
输出如下:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001D173052248>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/peterpan/PycharmProjects/The_Road_of_python/作用域.py', '__cached__': None, 'name': 'peter', 'age': 18, 'fn': <function fn at 0x000001D173110048>, 'func': <function func at 0x000001D1731100D8>}
{'x': 1}
name = 'peter'
age = 18
def fn(): pass
def func():
x = 1
print(globals() == globals())
输出为True
结论:全局的局部还是全局!