函数对象:python
函数是第一类对象的含义是函数能够被看成数据处理函数
函数可用于:对象
def func():blog
print(‘func’)内存
1.引用 f = func 把内存地址赋值给f作用域
2.看成参数传给一个函数 def foo(func)class
3.看成函数的返回值 return func容器
4.能够看成容器类型的元素 l =[func,1,2]变量
#函数嵌套的定义: def f1(): def f2(): def f3(): print('from f3') f3() f2() f1() #函数嵌套调用: def max(x,y): return x if x > y else y def max4(a,b,c,d): res1=max(a,b) res2=max(res1,c) res3=max(res2,d) return res3 print(max4(1,2,3,4))
名称空间和做用域引用
1.名称空间
存放名字和值的绑定关系的地方 (存值的内存地址)
2.名称空间的三大类
①内置名称空间:存放python解释器自带的名字
解释器打开生效,关闭失效
②全局名称空间:除了内置和局部的就是全局
文件运行时生效,执行完毕失效
③局部名称空间:用于存放函数调用期间函数体产生的名字
文件执行中调用某个函数时生效,函数执行完失效
总结:三种名称空间的加载顺序:内置名称空间-全局名称空间-局部名称空间
名称空间查找顺序:基于当前位置,自下向上找
3.做用域
做用域指的是区域、范围,做用域即做用的范围
全局做用范围:全局做用域(内置名称空间和全局名称空间)
全局有效,全局存活
局部做用范围:局部做用域(局部名称空间)
局部有效,临时存活
做用域关系是在函数定义阶段就固定死了,但凡调用函数都须要跑到定义阶段判断做用域关系
x = 1 def f1(): print(x) der f2(): x = 11 f1() f2()
结果为1
nonlocal 改局部,函数内往外找,没有就报错
global 改全局,没有也不会报错
在局部改全局可变类型,能够直接改
在局部改全局不可变类型,须要声明global,声明为全局的变量就能够直接修改了