Python: 函数名称空间与作用域
函数对象:(第一类对象)
定义: 函数是第一类对象: 函数名可以当做数据来使用
1. 可以直接被引用, 加 () 就能运行
- def foo():
- print("from foo")
- f=foo
- f()
2. 可以当作参数传入另一个函数
- def warpper(x):
- x()
- warpper(foo)
3. 可以当作另外函数的返回值
- def warpper2():
- return foo
- f=warpper2()
- print(f is foo)
4. 可以当作容器类型的一个元素
- l=[foo,1,2]
- l[0]()
名称空间:
定义: 存放名字与值绑定关系的地方(实际上是一块隔离的内存空间)
分类:
内置名称空间:
存放的是: 内置的名字与值的绑定关系
生效: python 解析器启动
失效: python 解析器关闭
全局名称空间:
存放的是: 文件级别定义的名字与值的绑定
生效: 执行 python 文件时, 以该文件级别定义的名字与值的绑定关系
失效: 文件执行完毕
局部名称空间:
存放的是: 函数内部定义的名字与值的绑定关系
生效: 调用函数时, 临时生效
失效: 函数调用结束
加载顺序: 先内资, 再全局, 最后局部
寻找顺序: 先局部, 再全局, 最后内置
作用域:
注意: 作用域关系, 在函数定义时, 就已经固定了, 与调用位置无关.
使用函数对象可以打破作于域的层级关系.
全局作用域: 包含内置名称空间与全局名称空间.
全局存活, 全局生效
globals(), 显示全局作用域中的名字对应关系
局部作用域: 包含局部名称空间
临时存活, 局部生效
locals(), 显示当前局部作用域中的名字对应关系
相关关键字: 都是在函数内部使用
global 申明使用全局作用域中的名字
nonlocal 申明不使用的本级局部作用域中的名称
来源: http://www.bubuko.com/infodetail-2619194.html