day3之装饰器
1、什么是装饰器?
#在不改变原函数的调用的情况下,为原函数增加一些额外的功能,打印日志,执行时间,登录认证
2、装饰器的形成过程
# 需求写一个函数测试另一个函数的执行效率
最初的实现方式,但是改变了函数的调用方式,需要改进
def timer(f1):
start_time = time.time()
f1()
end_time = time.time()
print(end_time- start_time) timer(func1)
改进后调用方式基本相似,但是多加了两行代码 def timer(f1):
start_time = time.time()
f1()
end_time = time.time()
print(end_time- start_time) f = func1
func1 = timer
func1(f) #== timer(func1)
最优的方法
def timer(f1):
def inner():
start_time = time.time()
f1()
end_time = time.time()
print(end_time - start_time)
return inner
func1 = timer(func1) #做下关系转换
func1()
通过python提供的语法塘实现装饰器
def timer(f1):
def inner():
start_time = time.time()
f1()
end_time = time.time()
print(end_time - start_time)
return inner @timer == func1 = timer(func1)
def func1():
print("晚上回去吃烧烤")
time.sleep(0.3)
@timer == func2 = timer(func2)
def func2():
print("晚上回去和啤酒")
time.sleep(0.3)
func1()
func2()
# 装饰器传参
def timer(f1):
def inner(*args, **kwargs):
start_time = time.time()
f1(*args, **kwargs)
end_time = time.time()
print(end_time - start_time)
return inner @timer #== func1 = timer(func1)
def func1(a, b):
print("晚上回去吃烧烤")
time.sleep(0.3)
@timer #== func2 = timer(func2)
def func2(a, b):
print("晚上回去和啤酒")
time.sleep(0.3) func1(111,222) #参数首先传到inner()函数 *args,然后在传到f1()函数中
func2(222,333)
# 函数返回值
def timer(f1):
def inner(*args, **kwargs):
start_time = time.time()
ret = f1(*args, **kwargs)
end_time = time.time()
print(end_time - start_time)
return ret
return inner @timer #== func1 = timer(func1)
def func1(a, b):
print("晚上回去吃烧烤")
time.sleep(0.3)
return 666
ret = func1(1, 2)
print(ret)
装饰器的写法规范
def wrapper(f1):
def inner(*args, **kwargs):
执行函数之前的操作
ret = f1() #返回值
执行函数之后的操作
return ret
return inner
day3之装饰器的更多相关文章
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- [原创]django+ldap实现单点登录(装饰器和缓存)
前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...
- PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...
- python cookbook 学习系列(一) python中的装饰器
简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...
- python基础补漏-05-生成器和装饰器
[1]生成器 很难用简单的语言描述生成器. 生成器:从字面上来理解,就是以某种规则为基础,不断的生成数据的工具 生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器 ...
- python --> 递归 以及装饰器
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
- python 装饰器的理解
一. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷 ...
随机推荐
- 关于如何以编程的方式执行TestNG
1.如果需要加入一个一个的类 public static void main(String args[]){ TestNG tng = new TestNG(); tng.SetTestClasses ...
- 02 Tensorflow的安装配置
1 anaconda 64 位,win10 安装 清华大学镜像网络,下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 选择下载文件 ...
- 输入N组父子对,求父子对所组成的二叉树的高度----17年某公司的笔试题
题目的大致意思如下: 输入N组数,一组数代表一个父子对(如,0 1,0代表父节点,1代表子节点),求这N组数所组成的二叉树的高度: 例如: 输入:6 0 1 0 2 1 3 1 4 2 5 ...
- form表单重置、清空方法记录
myform 是form的id属性值 1.调用reset()方法 function fomrReset() { document.getElementById("myform"). ...
- docker 操作
docker daemon 设置代理 http_proxy=109.105.4.17:8118 & systemctl start docker centos: Edit /etc/sysco ...
- windows本地blast
详细可参考https://www.jianshu.com/p/2f125cdf8262:https://blog.csdn.net/qq_34296043/article/details/544277 ...
- hdoj1069 Monkey and Banana(DP--LIS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 思路: 由题意,显然一种block可能有6种形式,且一种形式最多使用一次,因此最多有30×6=1 ...
- log4j每天,每小时产生一日志文件
log4j每天,每小时产生一日志文件 2016年08月05日 14:14:33 阅读数:6254 一.之前的文章中有log4j的相关配置以及属性的介绍,下面我们先把配置列出来: log4j.roo ...
- [leetcode]318. Maximum Product of Word Lengths单词长度最大乘积
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- linux系统挂载ISO文件
1 上传iso文件使用xftp上传系统oracleLinux7.3.iso光盘镜像到/toolsPackage 为方便使用,重命名光盘镜像文件[root@rhel64 software]# mv rh ...