一.基本装饰器

基本装饰器的作用:

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

  实现方法:

    在原函数上加

      @装饰器名字

      其中@叫做语法糖

    定义装饰器

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

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

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

      整个函数形成闭包

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. Cisco交换机基础命令 + Win Server08 R2 多网卡配置链路聚合

    最近捣鼓服务器链路集合需要配置交换机… 以前没弄过交换机,现学现卖… 一般交换机是支持telnet的,配置好ip可以直接telnet,当然如果没配的话就要用串口了,串口要选择Serial… 还好我们万 ...

  2. js数字货币格式互转

    //将1,234,567.00转换为1234567.00 function moneyToNumValue(val) { var num = val.trim(); var ss = num.toSt ...

  3. 如何扩展Orchard

    翻译自: http://msdn.microsoft.com/en-us/magazine/hh708754.aspx     动态类型系统 Content item是Orchard中的原子, 比如b ...

  4. mysql时间延时注入案例

    通过Burpsuite结合sqlmap发现如下接口存在时间盲注

  5. appium---第一个脚本--启动一个已存在的app

    1.可以使用android-sdk中的aapt工具 ①.选择一个版本的build_tools,加入path环境变量中 ②.验证aapt环境是否正常 3.下载你要测试的包,放入某一地址中(随意):aap ...

  6. Ubuntu Navicat 安装破解+解决乱码+其他问题

    一 下载安装 Navicat Premium: https://www.navicat.com.cn/download/navicat-premium Navicat products: https: ...

  7. VC9、VC11、VC14、VC15库 32位 64位 免费下载

    VC9.VC11.VC14.VC15库 32位 64位 免费下载 更新版本的PHP是用VC11,VC14或VC15(分别为Visual Studio 2012,2015或2017编译器)构建的,并且包 ...

  8. hdu 3183 A Magic Lamp 【RMQ】

    <题目链接> <转载于 >>>  > 题目大意: 给出一个长度不超过1000位的数,求删去m位数字以后形成的最小的数字是多少. 解题分析: 分析:我们可以把题 ...

  9. pyspider 启动错误

    [root@localhost python]# pyspider all [W 180629 07:08:26 run:413] phantomjs not found, continue runn ...

  10. JS 实现打印

    <input id="btnPrint" type="button" value="打印预览" onclick=preview(1) ...