一 装饰器进化之路
1)
import time

def index():
start_time=time.time()
time.sleep()
print('welcome to index world')
end_time=time.time()
print('%s'%(end_time-start_time))
index()
那么这个函数我们虽然实现了他的功能,但是修改了源代码,所以这种扩展新功能是不可用的。
2)
def index():
time.sleep()
print('welcome to index world') start_time=time.time()
index()
end_time=time.time()
print(end_time-start_time)
那么我们可以看出这两种运行结果是一样的,第二种既没有改变源代码,也没有改变调用方式。可是每次使用都要重新复制一次代码,造成代码重复过多。

3)
def index():
time.sleep()
print('welcome to index world') def outter():
start_time=time.time()
index()
end_time=time.time()
print(end_time-start_time)
f=outter()#我们通过调用outter函数就会运行
print(f)#将outter的返回值输出,那么outter没有返回值,所以输出为none
同样的改变了调用方式。
4)
def index():
time.sleep()
print('welcome to index world') def outter(func):
def inner():
star_time=time.time()
func()
end_time=time.time()
print(end_time-star_time)
return inner
index=outter(index)
index()
#首先这段代码的运行是:先定义一个index()然后到outter(),然后到最后的outter调用,调用之后开始运行outter里面的程序,运行到第一行
# 返回inner,然后调用index函数,运行index函数。
所以在这里outter就是我们所说的装饰器
5)装饰器模版
def outter(func):
def inner(*args,**kwargs):
res=func(*args,**kwargs)
return res
return inner
6)运行时间装饰器模版
def timmer(func):
def inner(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
end_time = time.time()
return res
return inner
index=timmer(index)
index() 7)验证登陆装饰器模版:

python之路之装饰器的更多相关文章

  1. 小白的Python之路 day4 装饰器前奏

    装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能 ...

  2. [Python之路] 使用装饰器给Web框架添加路由功能(静态、动态、伪静态URL)

    一.观察以下代码 以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码: import time def in ...

  3. 小白的Python之路 day4 装饰器高潮

    首先装饰器实现的条件: 高阶函数+嵌套函数 =>装饰器 1.首先,我们先定义一个高级函数,去装饰test1函数,得不到我们想要的操作方式 import time #定义高阶函数 def deco ...

  4. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  5. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  6. guxh的python笔记三:装饰器

    1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) tot ...

  7. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  8. python 3.x 的装饰器笔记

    今天学到了python的装饰器,感觉这个东西还是稍微有些复杂,所以记录下来,方便以后的查找.虽然标题是python 3.x的装饰器,但是我也没有怎么用过python 2.x,感觉上应该是和python ...

  9. python 中多个装饰器的执行顺序

    python 中多个装饰器的执行顺序: def wrapper1(f1): print('in wrapper1') def inner1(*args,**kwargs): print('in inn ...

随机推荐

  1. OK335xS-Android mkmmc-android-ubifs.sh hacking

    #/******************************************************************************* # * OK335xS-Androi ...

  2. C#单例的多种写法

    单例的细分写法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 最吊大的 一种--C#这样的高级语言特有 ...

  3. AOP jdk动态代理

    一: jdk动态代理是Spring AOP默认的代理方法.要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代 ...

  4. ElasticSearch—分页查询

    ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...

  5. set 与 map 的第一次尝试

    map 杭电6015http://acm.hdu.edu.cn/showproblem.php?pid=6015 基本用法:map<string,int>mp;   mp[class[ i ...

  6. Mybatis的mapper文件中$和#的用法及区别详解

    https://www.2cto.com/database/201806/752139.html用了一段时间的Mybatis了,对于$和#的用法老是很迷糊,特此记下加深记忆. 简单来说 #{} 会在将 ...

  7. HashMap Hashtable LinkedHashMap TreeMap

    // Map<String, String> map = new HashMap<String, String>(); // bb aa cc Map<String, S ...

  8. 【BZOJ1702】[usaco2007margold]队列平衡

    原来蛤习线性探测的时候要每次加一个稍大一点的数而不是每次+1……连蛤习都不会写,我tmd是有多弱 原题: N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, ...

  9. 部署tomcat到Linux

    1. alt+p   放文件 2.解压到自定义 apps文件夹中 tar -zxvf apache-tomcat-7.0.68.tar.gz -C apps 3.进入文件启动tomcat/bin ./ ...

  10. pow 的使用和常见问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/menxu_work/article/details/24540045 1.安装: $ curl ge ...