一.基本装饰器

基本装饰器的作用:

    在不改变原函数的基础上, 通过装饰器, 给原函数新增某些功能

  实现方法:

    在原函数上加

      @装饰器名字

      其中@叫做语法糖

    定义装饰器

      第一层函数传入参数(用于传入原函数)

      第二层使用原函数的同时, 加入需要新增的功能

      第一层函数要返回第二层函数名

      整个函数形成闭包

import time

 def runtime(func):
def wrapper():
start = time.time()
for i in range(100):
func()
end = time.time()
print("程序运行时间为 {} ".format((end - start)/1000.0))
return wrapper @runtime
def hello():
print("hello world") hello()
 
二.三层装饰器

现在需要在装饰器的基础上, 调用 @装饰器 的时候传入参数

就需要在原有的装饰器的基础上, 在外层写一个函数, 从而又形成闭包的结构

import time
def runtime(msg="默认值"):
def decorator(func):
def wrapper():
start = time.time()
for i in range(100):
func()
end = time.time()
print(msg)
print("程序运行时间为 {} ".format((end - start) / 1000.0))
return wrapper
return decorator @runtime("hello()")
def hello():
print("hello world") hello()

三.完善参数传递

在之前的装饰器中, 由于原函数可能存在不同种类的参数, 可能有各种各样的返回值, 所以要进行一下两点修改

    1 将装饰器实际执行函数的参数设置为(*, **)的形式

    2 改函数需要return 原函数

import time

def log(msg="默认值"):
def decorator(func):
def wrapper(*args, **kwargs):
print(func.__name__, msg)
return func(*args, **kwargs)
return wrapper
return decorator @log("hello()")
def hello():
print("hello world") hello()

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

  1. 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...

  2. 【转】Python之装饰器

    [转]Python之装饰器 本节内容 必要知识回顾 情景模拟 装饰器的概念及实现原理 回马枪(带参数的装饰器) 一. 必要知识回顾 在开始说装饰器之前,需要大家熟悉之前说过的相关知识点: 函数即“变量 ...

  3. 关于Python的装饰器(1)

    Python的装饰器的概念,一直有点微妙.之前在StackOverflow上看过一篇感觉说明的很清楚的介绍: *A decorator must accept a function as an arg ...

  4. Python的装饰器实例用法小结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...

  5. 进阶Python:装饰器 全面详解

    进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...

  6. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  7. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  8. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  9. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

随机推荐

  1. 本地化KendoUI

    <!doctype html> <html>     <head>         <title>Kendo UI Web</title> ...

  2. Vim的合并行操作

    日常常用到多行合并的功能,记录如下: 第一种, 多行合并成一行,即: AAAAABBBBBCCCCC 合并为:AAAAA BBBBB CCCCC 方法1: normal状态下 3J 其中的3是范围,可 ...

  3. Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF980F.html 题目传送门 - CF980F 题意 给定一个 $n$ 个节点 $m$ 条长为 $1$ 的边 ...

  4. BZOJ4241 历史研究 莫队 堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JO ...

  5. 存储过程导入excel

    #region 导入订单        protected override string DoExcelData(System.Data.DataTable dt)        {         ...

  6. JavaMelody 项目性能监控和调优工具

    转自 JavaMelody 可以实现对内存.CPU.线程.JDBC 连接数.HTTP 请求执行时间.SQL 执行时间(分析 Top SQL).方法执行时间(分析系统方法性能瓶颈)等等的监控. 配置方式 ...

  7. 如何在不使用try语句的情况下查看文件是否存在

    如果你要确定文件存在的话然后做些什么,那么使用try是最好不过的 如果您不打算立即打开文件,则可以使用os.path.isfile检查文件 如果path是现有常规文件,则返回true.对于相同的路径, ...

  8. Java中菜单的实现以及画实线与画虚线之间的自由转化

    1.Java画线 1 import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.a ...

  9. java设计模式之-观察者模式(发布-订阅模式)

    1.观察者模式定义  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 2.观察者模式结构 ...

  10. Ubuntu ssh-keygen 生成公钥并添加到远程服务器上

    1. 在本地生成公钥, ssh-keygen -t RSA -b 800 2. cd /root/.ssh 3. ssh-copy-id -i  id_rsa.pub 远程服务器IP 这一步需要输入远 ...