示例

直接给出示例,普通装饰器(即装饰器函数本身不带参数,或参数为实际被包裹的函数):

import time

from functools import wraps

def timethis(func):

'''

Decorator that reports the execution time.

'''

@wraps(func)

def wrapper(*args, **kwargs):

'''

New func

'''

start = time.time()

result = func(*args, **kwargs)

end = time.time()

print(func.__name__, end - start)

return result

return wrapper

@timethis

def countdown(n):

'''

Counts down

'''

while n > 0:

n -= 1

装饰器函数接收一个被包裹函数作为参数,然后返回一个新函数作为返回值。

@timethis

def countdown(n):

pass

和下面的写法一样,故装饰器@只是作为一种语法糖。

def countdown(n):

pass

countdown = timethis(countdown)

## 保留被包装函数的元数据 ##

使用@wraps(func)可以保留原始函数的元数据,如下:

>>> countdown.__name__

'countdown'

>>> countdown.__doc__

'\n\tCounts down\n\t'

>>> countdown.__annotations__

{'n': }

若不使用@wraps(func),结果如下:

>>> countdown.__name__

'wrapper'

>>> countdown.__doc__

'\n\tNew func\n\t'

>>> countdown.__annotations__

{}

## 获取被包装器包裹的原始函数 ##

装饰器已应用于函数,但想“撤消”它,以访问原始的未包装函数。可以按如下方式:

@somedecorator

def add(x, y):

return x + y

orig_add = add.__wrapped__

print(orig_add(3, 4)) # 7

只用再被包裹的函数上使用@wraps才能使用函数的__wrapped__属性。

最后但同样重要的一点是,请注意并非所有装饰器都使用@wraps,因此它们可能无法按所述方式工作。 特别是,内置的装饰器@staticmethod和@classmethod创建的描述符对象不遵循此约定(相反,它们将原始函数存储在__func__属性中)。

python无参数装饰器_Python装饰器(不带参数)相关推荐

  1. 学习python装饰器_Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  2. python解读器_Python装饰器完全解读

    Python Python开发 Python语言 Python装饰器完全解读 1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入 ...

  3. python简单装饰器_python装饰器的简单示例

    这篇文章主要为大家详细介绍了python装饰器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 装饰器的语法以 ...

  4. python装饰器_Python装饰器是个什么鬼?

    不知道大家的Python入门的怎么样了啊?后面几篇Python的文章涉及一些Python中高级的内容,建议还没入门的朋友好好阅读一下如何快速入门Python赶紧上车.后台回复"python& ...

  5. python装饰器_python装饰器完全指南之一

    设我们有一组函数,它们有共同的错误处理方法,比如打印日志和记录审计信息等.很显然,在每一个函数中都重复这些逻辑是不恰当的,它们应该被提炼到一个函数里,在这个函数的保护下,再调用我们的业务逻辑处理功能. ...

  6. python重复字符串n次_python装饰器听了N次也没印象,读完这篇你就懂了

    装饰器其实一直是我的一个"老大难".这个知识点就放在那,但是拖延症... 其实在平常写写脚本的过程中,这个知识点你可能用到不多 但在面试的时候,这可是一个高频问题. 一.什么是装饰 ...

  7. python重写和装饰器_python装饰器

    python装饰器的本质,就是闭包! 我们一般谈Python的闭包,都是指普通的入参,而谈装饰器的时候,入参一定有函数!闭包和装饰器,返回的都是函数.函数是代码的最小封装单位,装饰器作用于函数,它不影 ...

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

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

  9. python实现装饰器_python装饰器的实现

    说起装饰器我们可能已经很熟悉了(不了解的可以查看python基础学习--装饰器),随手就可以写一个简单的装饰器 def decorator(func): def inner(*args, **kwar ...

最新文章

  1. 丁磊:噢买尬,买它,华少别抢话
  2. 人工神经网络_图像加载(数据挖掘入门与实践-实验10)
  3. liferay 调用ajax
  4. jshell的安装使用
  5. LA 3458——Bridge
  6. 加快脑动脉瘤检测,AI来了
  7. KMPBoyer-Moore
  8. 2012.4.19总结(二)
  9. SpringCloud学习笔记(15)----Spring Cloud Netflix之Hystrix Dashboard的使用
  10. Centos7下编译安装Nginx、Mysql、PHP(文章底部包含一键安装脚本)
  11. 达观数据助力浙江大华构建企业级知识搜索共享平台,盘活沉淀数据
  12. java通过winrm实现remote powershell
  13. html怎样使图片自动旋转,css怎么让图片旋转?
  14. 火山引擎虚拟数字人技术与应用
  15. java 分页导出word_Java导出Word问题
  16. R学习连续变量之间的关系
  17. 微信公众号 Markdown 编辑器
  18. warcraft 3 经典语句之月之女祭司(Priestess of the moon)
  19. Linux服务器挂掉,使之自动重启脚本
  20. 用C#实现竖列转盘游戏

热门文章

  1. 2017年最流行的15个数据科学Python库
  2. Serverless,后端小程序的未来
  3. Vue002_计算属性和监视
  4. 利剑无意之如何判断一个数在40亿个整数中
  5. 5W字高质量java并发系列详解教程(上)-附PDF下载
  6. SpringBoot中的响应式web应用
  7. leetcode -- 357. Count Numbers with Unique Digits
  8. 【通俗易懂】C语言中,for循环中i++与++i的区别
  9. 报错:out cannot be resolved【已解决】
  10. 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)