在python里装饰器

其定义:装饰器就是一个函数,用来装饰其他函数,就是给其他函数添加功能。

装饰器有两个特点:

  1、装饰器不修改被装饰函数的源码;

  2、装饰器不锈钢被装饰函数的调用方式。

在编程中经常会有一些公共函数,在已经发布的程序中,为了程序的稳定性原函数是不允许随便修改其源代码的,并且合作开发中也不允许修改调用方式,那么如果要对原函数进行功能增加,怎么办呢?这时装饰器解决了这个问题。

装饰器用到的知识:

  1、函数可以作为变量传递给另一个函数

  2、函数的返回值也可以是另一个函数

装饰器实现代码:

有一个公共函数,作用是写日志文件:

 def write_log(filenmae, msg_info):
f = open(filenmae, 'a+', encoding='utf-8');
f.write(msg_info+'\n')
f.close()

如果想对这个写日志文件函数增加一个写文件时间监控,这里增加一个写日志文件函数的装饰器:

import time

def write_log_time(func):
def n_wite_log(filename,*msg_info):
s_time=time.time()
#参数:*msg_info 代表这个参数可传递也可不传递,例如只给文件名的日志,内容为记录时间
func(filename,*msg_info)
e_time=time.time()
print('write log file times:%s' %(e_time-s_time))
return n_wite_log

使用方法为在函数write_log前加一个@write_log_time

完整代码:

import time

def write_log_time(func):
def n_wite_log(filename,*msg_info):
s_time=time.time()
#参数:*msg_info 代表这个参数可传递也可不传递,例如只给文件名的日志,内容为记录时间
func(filename,*msg_info)
e_time=time.time()
print('write log file times:%s' %(e_time-s_time))
return n_wite_log @write_log_time
def write_log(filenmae, msg_info):
f = open(filenmae, 'a+', encoding='utf-8');
f.write(msg_info+'\n')
f.close() write_log('log.txt', '记录2')

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

  1. Python各式装饰器

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

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

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

  3. python基础——装饰器

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

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

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

  5. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  6. python 基础——装饰器

    python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...

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

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

  8. python基础—装饰器

    python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...

  9. 详解Python的装饰器

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  10. 关于python的装饰器(初解)

    在python中,装饰器(decorator)是一个主要的函数,在工作中,有了装饰器简直如虎添翼,许多公司面试题也会考装饰器,而装饰器的意思又很难让人理解. python中,装饰器是一个帮函数动态增加 ...

随机推荐

  1. VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法

    对于前面问题的分析:来源于http://blog.163.com/yuyang_tech/blog/static/216050083201211144120401/ 解决方法1: //来源:http: ...

  2. TensorFlow笔记-图片读取

    回到上一篇文件的读取分这么几步: # 构造队列 # 1,构造图片文件的队列 file_queue = tf.train.string_input_producer(filelist) # 构造阅读器 ...

  3. css 图片裁剪显示

    用object-fit:cover object-fit属性详解 object-fit:CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. object-fit:fill 被替换 ...

  4. DedeCMS自定义表单制作和调用办法

    [摘要]在很多建站需求中,需要一些额外的表单供前台用户提交,以便于收集.统计.分析及处理更多的数据,利用DedeCMS自带提供的自定义表单功能即可满足大多数的此类需求,本文就讲一下如何使用DedeCM ...

  5. lr参数化

    为什么做参数化? 数据库校验:注册用户时会看数据库有没有这个账号 应用程序校验:pc端qq登陆,一个账号只能登陆一台电脑 1.数据库或应用程序提交值的唯一性校验 数据库查询过程: 1.语法检查.语义检 ...

  6. Maven中央仓库发布历程

    一.前言 最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,通过这个组件,我们可以动态根据配置文件进行多个线程池的初始 ...

  7. gulp压缩js文件报错日志

    输出 gulp-uglify 压缩js文件时报错信息 gulp.task('es6', function () { return gulp.src('src/main/webapp/bower_com ...

  8. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  9. js 实现 联动

    使用jQuery实现联动效果 应用场景:收货地址 1.准备三个下拉框 <select class="changeArea" id='province'> <opt ...

  10. rgw main

    说明关闭标准的错误输出,而使用标准输出替换.这是因为FCGX 将信息输出到了STDOUT. 参数: 默认参数 –debug-rgw 和 –keystring , 如果 argv 中具备输入参数, 则通 ...