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之装饰器的更多相关文章

  1. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  2. python装饰器

    今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...

  3. Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  4. [原创]django+ldap实现单点登录(装饰器和缓存)

    前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...

  5. PHP 装饰器模式

    装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...

  6. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  7. python基础补漏-05-生成器和装饰器

    [1]生成器 很难用简单的语言描述生成器. 生成器:从字面上来理解,就是以某种规则为基础,不断的生成数据的工具 生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器 ...

  8. python --> 递归 以及装饰器

    一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...

  9. python 装饰器的理解

    一. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷 ...

随机推荐

  1. 使用JS获取当前地理位置方法汇总

    使用JS获取当前地理位置方法汇总 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014-12-18我要评论 这篇文章主要介绍了使用JS获取当前地理位置方法汇总,需要的朋友可以参考下 ...

  2. gulp 用法 小结

    前端们,gulp该用起来了,简单的demo入门 gulp.grunt前端自动化工具,只有用过才知道多么重要. 作者:一文不提来源:博客园|2015-05-28 10:35 移动端 收藏 分享 gulp ...

  3. InitComponent的使用

    网页中的数据,有些是不在网页上改变的,像一些个人信息,比如:头像,当前用户名,友情链接等等,每次请求该页面都要重新加载,这样很消耗服务器资源,会降低服务器的性能,这个时候我们可以把这些不变的信息,统一 ...

  4. JS 实现Json查询的方法实例

    其实很简单,我这部分代码,前一部分是简单的实现如何使用JS写模板,第二个就是具体的实现了JSON查询的一个扩展. 以后查询Json就有了利器了. 代码如下: /*         * 定义模板函数   ...

  5. scala -- 层级

    层级 层级的顶端是Any 类,定义了如下方法 final def ==(that:Any):Boolean final def !=(that:Any):Boolean def equals(that ...

  6. 如何获取某个网站的favicon.ico

    http://moco.imooc.com/player/report.html 今天看到这个网站上,左侧的小图片挺好看的,想弄下来,检查源码,也没有看到 <head> <meta  ...

  7. springmvc后台生成验证码

    url http://localhost:8080/admin/getCode http://localhost:8080/admin/checkCode controller package com ...

  8. iOS 基于MVC设计模式的基类设计

    iOS 基于MVC设计模式的基类设计 https://www.jianshu.com/p/3b580ffdae00

  9. 批量MD5命名文件

    #coding=utf-8 import os import hashlib def GetFileMd5(filename): if not os.path.isfile(filename): pr ...

  10. 【转】Https内部机制基础知识

    互联网权威机构 - CA 机构,又称为证书授权 (Certificate Authority) 机构,浏览器会内置这些"受信任的根证书颁发机构" (即 CA). 数字证书 提及 H ...