一、函数是对象
函数是第一类对象的含义是函数可以被当作数据处理
二、函数的嵌套定义
def f1():
def f2():
print('from f2')
f2()
f1()
三、名称空间与作用域
1.名称空间namespace
存放名字与值绑定关系的地方
2、名称空间分为三大类
内置名称空间:
作用:存放Python解释器自带的名字
生命周期:
在解释器启动时生效,在解释器关闭时失效
全局名称空间:
作用:除了内置的与局部的名字外,其余都是全局名字
生命周期:
在文件执行时生效,在文件执行完毕时失效
局部名称空间:
作用:用于存放函数调用函数体产生的名字
生命周期:
在文件执行过程
如果调用了某个函数才会临时生效,在函数执行完毕后失效
三种名称空间的加载顺序是:
内置-》全局-》局部
名称空间就是用来存放名字与值的绑定关系的,所以但凡要查找名字
一定是从三者之一找到,查找顺序:
从当前所在的位置倒着查找,如果当前所在的位置是局部名称空间,
则查找顺序是:
局部-》全局-》内置
3、作用域
域指的是区间、范围,作用域即作用范围
全局作用范围,全局作用域(内置名称空间与全局名称空间)
全局有效,全局存货
局部作用范围,局部作用域(局部名称空间)
局部有效,临时存活
注:
作用域关系在函数定义阶段就已经固定死了,但凡调用函数都需要跑到定义阶段去找作用域关系
在局部如果想要修改全局的可变类型,不需要借助任何声明,可以直接修改
在局部如果要修改全局的不可变类型,需要借助global声明,声明为全局的变量就可以直接修改了。