python 装饰函数
装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
原则: 开放封闭原则 开放 : 对扩展是开放的 封闭 : 对修改是封闭的
# timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
1 import time 2 def timmer(f): #装饰器函数 3 def inner(): 4 start = time.time() 5 f() #被装饰的函数 6 end = time.time() 7 print(end - start) 8 return inner 9 10 @timmer #语法糖 @装饰器函数名 11 def func(): #被装饰的函数 12 time.sleep(0.01) 13 print('老板好同事好大家好') 14 return '新年好' 15 #inner 16 #func = timmer(func) 17 ret = func() #inner() 18 print(ret)
装饰带参数函数的装饰器
def timmer(f): #装饰器函数def inner(*args,**kwargs):#(1,2) /(1)start = time.time()ret = f(*args,**kwargs) #f(1,2) #被装饰的函数end = time.time()print(end - start)return retreturn inner@timmer #语法糖 @装饰器函数名
def func(a,b): #被装饰的函数time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好'
装饰器的固定模式
def wrapper(f): #装饰器函数,f是被装饰的函数def inner(*args,**kwargs):'''在被装饰函数之前要做的事'''ret = f(*args,**kwargs) #被装饰的函数'''在被装饰函数之后要做的事'''return retreturn inner@wrapper #语法糖 @装饰器函数名
def func(a,b): #被装饰的函数time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好'
装饰器进阶
带参数的装饰器
#500个函数统一import time
FLAG=False
def time_out(FLAGE):def timmer(f): #装饰器函数def inner(*args,**kwargs):#(1,2) /(1)if FLAGE:start = time.time()ret = f(*args,**kwargs) #f(1,2) #被装饰的函数end = time.time()print(end - start)return retelse:ret = f(*args, **kwargs) # f(1,2)return retreturn innerreturn timmer@time_out(FLAG) #语法糖 @装饰器函数名
def func(a,b): #被装饰的函数time.sleep(0.01)print('老板好同事好大家好',a,b)return '新年好'func(2,3)
多个装饰器装饰一个函数
#多个装饰器装饰一个函数
def wrapper1(func):def inner1():print('wrapper1 ,before func')ret = func()print('wrapper1 ,after func')return retreturn inner1
def wrapper2(func):def inner2():print('wrapper2 ,before func')ret = func()print('wrapper2 ,after func')return retreturn inner2
def 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())
###
wrapper3 ,before func
wrapper2 ,before func
wrapper1 ,before func
in f
wrapper1 ,after func
wrapper2 ,after func
wrapper3 ,after func
哈哈哈
wraps的用法
from functools import wraps
def wrapper(func): #func = holiday@wraps(func)def inner(*args,**kwargs):print('在被装饰的函数执行之前做的事')ret = func(*args,**kwargs)print('在被装饰的函数执行之后做的事')return retreturn inner@wrapper #holiday = wrapper(holiday)
def holiday(day):'''这是一个放假通知'''print('全体放假%s天'%day)return '好开心'print(holiday.__name__)
print(holiday.__doc__)
ret = holiday(3) #inner
print(ret)
转载于:https://www.cnblogs.com/olivia2018/p/8137505.html
python 装饰函数相关推荐
- Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能
Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能 目录
- python函数装饰函数_Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- python 装饰器 二 (装饰带参数的函数)
#!/usr/bin/env python #_*_coding=utf-8_*_ #Author: xieyixue #mail: xyx_0410@163.com #Created Time: 2 ...
- python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...
本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...
- python装饰器实例-Python函数装饰器--实例讲解
一.装饰器定义: 1.装饰器的本质为函数: 2.装饰器是用来完成被修饰函数的附加功能的 所以:装饰器是用来完成被修饰函数附属功能的函数 装饰器的要求: 1.不能修改被修饰函数的源代码: 2.不能更改被 ...
- python装饰器函数-Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- python装饰器函数-python函数装饰器
什么是装饰器 装饰器是一个可调用的对象,其参数是另一个函数(被装饰的函数).装饰器可能会: 1,处理被装饰的函数,然后把它返回 2,将其替换成另一个函数或者对象 若有个名为decorate的装饰器,则 ...
- python装饰器函数-【python3】 函数 装饰器
第一步 : 了解装饰器 装饰器模式,重点在于装饰,装饰的核心仍是被装饰的对象. 举一个栗子:我今天穿了一件短袖,但是突然一阵风,短袖没办法为我御寒,我想到的办法是将短袖变得更厚更长,但是改造之后,它就 ...
- python装饰器函数-python装饰器1:函数装饰器详解
先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了 ...
最新文章
- endnote咋手动输入文献_EndNote 如何在 Word 中手动输入引文
- 项目怎么查服务器,服务器查询项目标签
- 沉没成本(要不要买房)
- mysql中对象标识符的命名规则,标准规范数据库命名规范.doc
- EularProject 39:给周长推断构成直角三角形个数
- python 操作微信闪电贷款_16、6个能够让Python程序快如闪电的小技巧
- 深入理解jsonp跨域请求原理
- 文件不存在的话创建文件 文件上传所遇到的问题、
- 很累很失败,发奋学英语
- 电驴搜索服务器正在连接,电驴连接不上服务器导致无法搜索解决的方法介绍
- 小说APP源码—小说app开发如何做到小说APP系统快速搭建?
- Word中搜狗输入法不管用了怎么办?
- Qt系列文章之 QAbstractItemModel(上)
- 【51nod 1538】一道难题(常系数齐次线性递推)
- 名帖299 王铎 行书《书法册页李贺诗四首》
- Docker的基本使用
- A股实践 :图神经网络与新闻共现矩阵策略(附代码)
- 不得不看的Python入门知识
- 费雪MOGAFX方程式是什么? -
- 面试积累-Redis-Redis主要消耗什么物理资源?