示例

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

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. win10+Linux双系统安装及一些配置问题
  2. python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)
  3. 存储空间_Tan分享 存储空间清理
  4. OpenCV学习之Mat::at()理解
  5. Laravel5.1 搭建博客 --文章的增删改查
  6. 中国广电设备行业十四五运营模式与投资机遇研究报告2022版
  7. android context继承关系,android中Context深入详解
  8. 2019蓝桥杯省赛---java---B---6(特别数的和)
  9. c#多线程操作界面控件的简单实现
  10. “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图
  11. java jdbc连接oracle数据库连接 不抛出异常,JDBC连接Oracle发生异常的原因
  12. php如何用菜刀连接getshell,phpmyadmin之getshell总结
  13. 常见的.net误解 1-1 字符串是不可修改的(immutable)
  14. 离线服务器系统补丁如何打,Win系统补丁要不要打?如何打补丁才最适合?
  15. 0基础学嵌入式:嵌入式linux视频教程免费分享!
  16. Affinity Photo for Mac中文破解版永久激活方法
  17. 第十二届蓝桥杯真题-左孩 子右兄弟(dfs)
  18. excel函数公式大全
  19. IPhone手机无法连接蓝牙
  20. wangEditor 5 - 修改工具栏 toolbar 默认背景色(去掉背景颜色改为透明)

热门文章

  1. Containerd迎来1.0通用版本
  2. windows下utf-8和unicode的相互转换
  3. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
  4. 【牛客网】迷途的牛牛 C++
  5. 【Java 排序】重写Compare方法,实现自己定义排序
  6. C#中重写(override)和覆盖(new)的区别
  7. 汇编语言 【大练习】寻址方式在结构化访数据访问中的应用
  8. netty系列之:netty中的Channel详解
  9. 看动画学算法之:二叉搜索树BST
  10. java线程内存模型_深度解析Java多线程的内存模型