一 函数对象
函数时第一类对象:指的是函数可以当做数据传递
①可以被引用
②可以被当做函数的参数传入
③ 可以当做函数的返回值
④可以当做容器的元素
二 函数嵌套
1、函数的嵌套调用
2、 函数的嵌套定义
三 名称空间与作用域
1、名称空间指的是: 存放名字与值绑定关系的地方
1)内置名称空间:python解释器内置的名字。max,len等(python解释器启动就有)
2)全局名称空间 :文件级别定义的名字 (执行python文件时生效)
3)局部名称空间: 函数内部定义的名字(在函数调用时生效,调用结束后失效)
加载顺序: 内置--全局--局部名称空间
访问名字顺序: 局部--全局--内置
2、全局作用域(全局范围): 内置名称空间与全局名称空间的名字,全局存活,全局有效,globals()
局部作用域(局部范围): 局部名称空间的名字,临时存活,临时有效 locals()
3、打破函数层级限制来调用函数
4、函数的作用关系在函数定义阶段就已经固定了,与调用无关
四 闭包函数
定义在函数内部的函数,该函数的函数体代码包含对外部作用域(而不是对全局作用域)名字的引用,通常将闭包函数用return返回,可以在任意位置使用
五 装饰器
1、 开放封闭原则: 对扩展开放,对修改封闭
2、装饰器: 装饰他人的,器指的是任意可调用对象,现在的场景--函数
3 、原则:①不修改被装饰对象的源代码
②不修改被装饰对象的调用方式
装饰器的目的:在遵循1,2,的前提下为被装饰的对象添加新功能
源代码
新功能:统计函数的执行时间
4、装饰器的语法
问题一: 假如函数index有返回值的问题
问题二; index()函数有参数的情况下
5、以上可以看做是无参装饰器,下面来有参装饰器
源代码:
为index实现授权功能
修订版本,有参装饰器
增加了engine变量
6、并列多个装饰器
7、给函数加上注释