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 申明不使用的本级局部作用域中的名称
原文地址:https://www.cnblogs.com/bailo/p/9095097.html