python基础知识(六)函数----(三)
2019-04-14 09:57
295 查看
(六)函数----(三)
目录
6.1装饰器的本质、功能、原则
装饰器的本质:一个闭包函数
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展
装饰器的原则:开放封闭原则
开放 : 对扩展是开放的
封闭 : 对修改是封闭的
语法糖:@
6.2装饰器的固定模式
[code]#了解 import time # print(time.time()) # 获取当前时间 #time.sleep(10) #让程序在执行到这个位置的时候停一会儿
获取一个函数的运行时间
[code]def timer(): start = time.time() #开始时间 print('hello,python') time.sleep(1) end = time.time() #结束时间 print(end - start) timer()
把执行代码转化为一个函数
[code]def f(): print('hello,python') time.sleep(1) def timer(): start = time.time() #开始时间 f() end = time.time() #结束时间 print(end - start) timer()
为了方便计算其他函数的执行时间,把函数名当作参数
[code]def f(): print('hello,python') time.sleep(1) def timer(f1): start = time.time() #开始时间 f1() end = time.time() #结束时间 print(end - start) timer(f)
想用原函数名执行函数,加入闭包
[code]def f(): print('hello,python') time.sleep(1) def timer(f1): #装饰器函数 def inner(f1) : start = time.time() #开始时间 f1() #被装饰函数 end = time.time() #结束时间 print(end - start) return inner f = timer(f) ##inner() f()
若原函数有返回值
[code]def f(): print('hello,python') time.sleep(1) return '返回值' def timer(f1): def inner(): start = time.time() #开始时间 ret = f1() end = time.time() #结束时间 print(end - start) return ret return inner f = timer(f) print(f())
语法糖
f = timer(f)----->@timer
@timmer #语法糖 @装饰器函数名
def f(): #被装饰的函数
[code]def timer(f1): def inner(): start = time.time() #开始时间 ret = f1() end = time.time() #结束时间 print(end - start) return ret return inner @timer def f(): print('hello,python') time.sleep(1) return '返回值' print(f())
若原函数含参数
[code]def timer(f1): def inner(a): start = time.time() #开始时间 ret = f1(a) end = time.time() #结束时间 print(end - start) return ret return inner @timer def f(a): print(a) time.sleep(1) return '返回值' print(f('hello,python'))
若含有多个参数,位置参数*args,关键字参数**kwargs
[code]def timer(f1): def inner(*args,**kwargs): start = time.time() #开始时间 ret = f1(*args,**kwargs) end = time.time() #结束时间 print(end - start) return ret return inner @timer def f(a,b,c,d): print(a,b,c,d) time.sleep(1) return '返回值' print(f(1,2,3,d = 5))
装饰器的固定模式
[code]def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事''' ret = f(*args,**kwargs) #被装饰的函数 '''在被装饰函数之后要做的事''' return ret return inner @wrapper #语法糖 @装饰器函数名 def func(a,b): #被装饰的函数 print(a,b) return 'aaa'
相关文章推荐
- Python 第一章 基础知识(6) 函数
- Python基础知识:函数、三元函数、lambda函数
- [Python学习] 专题一.函数的基础知识
- python3函数基础知识一
- Python编程:从入门到实践 学习笔记 基础知识(六)函数
- 【脚本语言系列】关于Python基础知识函数缓存,你需要知道的事
- Python基础知识(四)--函数
- 基础知识(八)python文件操作相关函数
- Python基础-函数知识复习
- python基础知识之常用函数
- python-基础知识之函数二
- 关于python的基础知识4--函数
- 个人随手自学笔记--python3入门及基础知识点(5)—— 枚举、闭包、表达式、函数、装饰器、小爬虫
- 个人随手自学笔记--python3入门及基础知识点(3)——包,模块,函数,类
- 关于python的基础知识12--方法/函数
- python基础知识之变量、语句、函数、模块
- python基础知识——函数
- python基础知识4(字典和函数)
- python基础知识整理4——函数闭包
- Python 函数基础知识汇总