python之函数三装饰器
装饰器形成的过程
装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数前后加功能
原则:开发封闭原则
开发:对扩展是开发的
封闭:对修改是封闭的
装饰器的固定模式
计算运行时间
1 import time 2 # time.time()获取当前时间 3 # time.sleep(5)让程序在执行到这个位置的时候停一会儿 4 5 6 def timer(f):#func地址 ;装饰器函数 7 #闭包 8 def inner(): 9 start=time.time() 10 ret=f()#被装饰的函数 11 end=time.time() 12 print(end-start) 13 return ret 14 return inner 15 @timer #语法糖 @装饰器函数名 16 # func=timer(func)#就等于@timer 17 def func():#被装饰的函数 18 # start=time.time() 19 print(1) 20 time.sleep(0.01) 21 # end=time.time() 22 # print(end-start) 23 return '新年好' 24 ret=func()#实际执行的是inner 25 print(ret)
timer就是一个装饰器函数,只是对一个函数有装饰作用
装饰带参数函数的装饰器
1 #装饰带参数函数的装饰器 2 import time 3 def timer(f):#func地址 ;装饰器函数 4 #闭包 5 def inner(*args): 6 start=time.time() 7 ret=f(*args)#被装饰的函数 8 end=time.time() 9 print(end-start) 10 return ret 11 return inner 12 @timer #语法糖 @装饰器函数名 13 def func(a):#被装饰的函数 14 print(1,a) 15 time.sleep(0.01) 16 return '新年好' 17 @timer #语法糖 @装饰器函数名 18 def func1(a,b):#被装饰的函数 19 print(1,a,b) 20 time.sleep(0.01) 21 return '新年好' 22 23 ret=func1(1,2)#实际执行的是inner 24 ret1=func(1) 25 #func()#实际执行的是inner 26 print(ret) 27 print(ret1)
固定格式
def wrapper(f):#f被装饰的函数,wrapper就是装饰def inner(*args,**kwargs):#定义一个其他函数#在被装饰函数之前要做的事ret=f(*args,**kwargs)#被装饰的函数,被装饰的函数执行#在被装饰函数之后要做的事return retreturn inner#不加() @wrapper #语法糖 @装饰器函数名 def func1(a,b):#被装饰的函数time.sleep(0.01)print(1,a,b)return '新年好'
装饰器进阶
1 def wrapper(func): #func = holiday 2 def inner(*args,**kwargs): 3 print('在被装饰的函数执行之前做的事') 4 ret = func(*args,**kwargs) 5 print('在被装饰的函数执行之后做的事') 6 return ret 7 return inner 8 9 @wrapper #holiday = wrapper(holiday) 10 def holiday(day): 11 '''这是一个放假通知''' 12 print('全体放假%s天'%day) 13 return '好开心' 14 15 print(holiday.__name__)
1 # 装饰器进阶 2 # functools wraps 3 from functools import wraps 4 def wrapper(func):#f被装饰的函数,wrapper就是装饰 5 @wraps(func)# 6 def inner(*args,**kwargs): 7 print('在被装饰的函数执行之前做的事') 8 ret = func(*args,**kwargs) 9 print('在被装饰的函数执行之后做的事') 10 return ret 11 return inner 12 @wrapper #语法糖 @装饰器函数名 13 def holiday(day): 14 '''这是一个放假通知''' 15 print('全体放假%s天'%day) 16 return '好开心' 17 print(holiday.__name__) 18 print(holiday.__doc__) 19 ret = holiday(3) #inner 20 print(ret) 21 #带参数的装饰器 22 # 多个装饰器装饰同一个函数 23 24 # 函数名.__name__查看字符串格式的函数名 25 # 函数名.__name__#document查看函数的注释
1 #带参数的装饰器 2 #500个函数 3 import time 4 FLAGE = False 5 def timmer_out(flag): 6 def timmer(func): 7 def inner(*args,**kwargs): 8 if flag: 9 start = time.time() 10 ret = func(*args,**kwargs) 11 end = time.time() 12 print(end-start) 13 return ret 14 else: 15 ret = func(*args, **kwargs) 16 return ret 17 return inner 18 return timmer 19 # timmer = timmer_out(FLAGE) 20 @timmer_out(FLAGE) #@timer #wahaha = timmer(wahaha) 21 def wahaha(): 22 time.sleep(0.1) 23 print('wahahahahahaha') 24 25 @timmer_out(FLAGE) 26 def erguotou(): 27 time.sleep(0.1) 28 print('erguotoutoutou') 29 wahaha() 30 erguotou()
#多个装饰器装饰一个函数 def wrapper1(func):def inner1():print('wrapper1 ,before func')ret = func()print('wrapper1 ,after func')return retreturn inner1def wrapper2(func):def inner2():print('wrapper2 ,before func')ret = func()print('wrapper2 ,after func')return retreturn inner2def wrapper3(func):def inner3():print('wrapper3 ,before func')ret = func()print('wrapper3 ,after func')return retreturn inner3@wrapper3 @wrapper2 @wrapper1 def f():print('in f')return '哈哈哈'print(f())#记录用户的登录情况 #计算这个函数的执行时间
转载于:https://www.cnblogs.com/xk66d/p/10822318.html
python之函数三装饰器相关推荐
- python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之 ...
- python log函数_python装饰器的使用
1. 装饰者模式 装饰者模式是常用的软件设计模式之一.通过此设计模式,我们能够在不修改任何底层代码情况下,给已有对象赋予新的职责.python中可以用装饰器简单地实现装饰者模式. 1.1 将函数作为参 ...
- python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...
在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...
- python 二——函数、装饰器、生成器、面向对象编程(初级)
本节内容 1.函数 2.装饰器 3.生成器 4.类 一.函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强... ...
- python基础-函数之装饰器、迭代器与生成器
1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar():print("from in the bar.")def foo ...
- what's the python之函数及装饰器
what's the 函数? 函数的定义:(return是返回值,可以没有,不过没有的话就返回了None) def wrapper(参数1,参数2,*args,默认参数,**kwargs):'''注释 ...
- python wraps函数_python装饰器---@wraps
BEGIN: python装饰器 装饰器(Decorators)是Python的一个重要部分.简单地说:装饰器是修改其他函数的功能的函数.他们有助于让我们的代码更简短,也更Pythonic(Pytho ...
- python中高阶函数和装饰器_三.Python高阶函数和装饰器
1高阶函数 1.1 数学概念回顾下数学知识: y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中,高阶函数至少应当是满足下面一个条件的函数: ...
- python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...
一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...
最新文章
- ODOO权限管理,在两个方面设置权限
- 使用IRP进行文件操作
- tomcat 随windows启动
- 信息检索报告_读者信息素养状况问卷调查分析报告来啦
- tmpfs加速并降低squid负载(一)
- php curl模拟https请求
- 公众号发布代码最好的工具markdown语法
- 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
- 文本获取和搜索引擎中的反馈模型
- 如何区分家里的网线是超五类还是超六类的呢?
- centos终止linux程序,CentOS启动和停止服务详解
- 在一堆人还在犹豫《SEO实战密码》是否值得购买的时候,在下已经收藏了1/10的签名版...
- 运算符——Python
- css clear属性 的深入了解
- 用java中的map解析微信MicroMsg里的CompatibleInfo.cfg和systemInfo.cfg
- win7系统修复工具_win7系统如何修复
- 用深度学习创作艺术绘画
- Spring简述以及AOP、IOC
- C++ vector 标准差
- python能代替matlab吗_MATLAB替代软件 - 老牛博客