目录

带参数的装饰器(函数)

类装饰器


装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

带参数的装饰器(函数)

来想想这个问题,难道@wraps不也是个装饰器吗?但是,它接收一个参数,就像任何普通的函数能做的那样。那么,为什么我们不也那样做呢? 这是因为,当你使用@my_decorator语法时,你是在应用一个以单个函数作为参数的一个包裹函数。记住,Python里每个东西都是一个对象,而且这包括函数!记住了这些,我们可以编写一下能返回一个包裹函数的函数。

在函数中嵌入装饰器
我们回到日志的例子,并创建一个包裹函数,能让我们指定一个用于输出的日志文件。

注意:@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。

from functools import wrapsdef logit(logfile='out.log'):def logging_decorator(func):@wraps(func)def wrapped_function(*args, **kwargs):log_string = func.__name__ + " was called"print(log_string)# 打开logfile,并写入内容with open(logfile, 'a') as opened_file:# 现在将日志打到指定的logfileopened_file.write(log_string + '\n')return func(*args, **kwargs)return wrapped_functionreturn logging_decorator@logit()
def myfunc1():passmyfunc1()
# Output: myfunc1 was called
# 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串@logit(logfile='func2.log')
def myfunc2():passmyfunc2()
# Output: myfunc2 was called
# 现在一个叫做 func2.log 的文件出现了,里面的内容就是上面的字符串

类装饰器

没错,装饰器不仅可以是函数,还可以是类,相比函数装饰器,类装饰器具有灵活度大、高内聚、封装性等优点。使用类装饰器主要依靠类的__call__方法,当使用 @ 形式将装饰器附加到函数上时,就会调用此方法。

class Foo(object):def __init__(self, func):self._func = funcdef __call__(self):print ('class decorator runing')self._func()print ('class decorator ending')@Foo
def bar():print ('bar')bar()
functools.wraps

Python 两种装饰器相关推荐

  1. python两个装饰器执行顺序_python中多个装饰器的执行顺序

    今天讲一下python中装饰器的执行顺序,以两个装饰器为例. 装饰器代码如下: def wrapper_out1(func): print('--out11--') def inner1(*args, ...

  2. python两个装饰器执行顺序_python中多个装饰器的执行顺序详解

    装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的 ...

  3. python两层装饰器_python装饰器

    Python的装饰器的英文名叫Decorator,基本上适用的场景就是"装修":不涉及主流程业务,用于鉴权.审计等副业. 1.函数 在python中,函数通过def关键字.函数名和 ...

  4. python装饰器-Python基础-20装饰器

    20.装饰器 20.1 函数基础知识 在Python中函数为一等公民,我们可以: 把函数赋值给变量 在函数中定义函数 在函数中返回函数 把函数传递给函数 20.1.1 把函数赋值给变量 在Python ...

  5. python类装饰器详解-python 中的装饰器详解

    装饰器 闭包 闭包简单的来说就是一个函数,在该函数内部再定义一个函数,并且这个内部函数用到了外部变量(即是外部函数的参数),最终这个函数返回内部函数的引用,这就是闭包. def decorator(p ...

  6. 二十一、深入Python强大的装饰器

    @Author: Runsen 文章目录 闭包 装饰器 嵌套函数的装饰器 带参数嵌套函数的装饰器 类装饰器 嵌套装饰器 @Date:2019年07月11日 最近有同学在问关于Python中装饰器的问题 ...

  7. Python闭包与装饰器

    Python闭包与装饰器 一.闭包       函数是一个对象,所以可以对象的形式作为某个函数的结果返回.函数执行完后内部变量将会被回收.在闭包中,由于内部函数存在对外部函数的变量的引用,所以即使外部 ...

  8. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  9. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

最新文章

  1. tf rnn layer
  2. 26岁!年入100万,两周把 Github 项目推向全球榜首,他是怎么做的?
  3. 干活的不如写ppt的吗_干活不如写PPT 这话太真实
  4. python怎么分析各个时间段的数据_Python数据分析:Python对Word数据的读写
  5. make -C $(KDIR) M=$(PWD) modules
  6. C++自学06:sizeof运算符
  7. web表格增删改_白话django之数据的增删改
  8. Google Android创赢路线与产品开发实战
  9. Android自动化测试(UiAutomator)简要介绍 - 萧瑟一笑的专栏 - 博客频道 - CSDN.NET...
  10. 绿色IT实施必要性 数字可不会撒谎
  11. 爬虫实战之抓取猫眼电影排行TOP100(使用正则表达式提取数据)
  12. ffplay播放器-数据读取线程
  13. Mac设置鼠标滚轮方向
  14. Matlab导出图片格式调整
  15. v-loading的使用(ElementUI)
  16. 我给bia娘写的交互参考1
  17. python要学什么英文歌_可以读英语课文的软件
  18. c语言写modbus协议,C语言编写modbus协议
  19. 基础篇:ios开发概述
  20. 最新爱客CMS米酷优化版源码 免授权带伪静态规则

热门文章

  1. ACL'21 | debug完的神经网络,如何测试是否仍然存在bug?
  2. 在深度学习顶会ICLR 2020上,Transformer模型有什么新进展?
  3. Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持
  4. 会议交流 | 第十五届全国知识图谱与语义计算大会(CCKS 2021)12月25日线上召开...
  5. 论文浅尝 - EMNLP2020 | 通过词重排序跨语言解析
  6. PYTHON得到pdf页数、遍历当前文件夹
  7. 何使用BERT模型实现中文的文本分类
  8. C++ 类设计核查表
  9. mybatis异常invalid comparison: java.util.Date and java.lang.String
  10. 防止表单按钮多次提交