python无参数装饰器_Python装饰器(不带参数)
示例
直接给出示例,普通装饰器(即装饰器函数本身不带参数,或参数为实际被包裹的函数):
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装饰器(不带参数)相关推荐
- 学习python装饰器_Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...
- python解读器_Python装饰器完全解读
Python Python开发 Python语言 Python装饰器完全解读 1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入 ...
- python简单装饰器_python装饰器的简单示例
这篇文章主要为大家详细介绍了python装饰器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 装饰器的语法以 ...
- python装饰器_Python装饰器是个什么鬼?
不知道大家的Python入门的怎么样了啊?后面几篇Python的文章涉及一些Python中高级的内容,建议还没入门的朋友好好阅读一下如何快速入门Python赶紧上车.后台回复"python& ...
- python装饰器_python装饰器完全指南之一
设我们有一组函数,它们有共同的错误处理方法,比如打印日志和记录审计信息等.很显然,在每一个函数中都重复这些逻辑是不恰当的,它们应该被提炼到一个函数里,在这个函数的保护下,再调用我们的业务逻辑处理功能. ...
- python重复字符串n次_python装饰器听了N次也没印象,读完这篇你就懂了
装饰器其实一直是我的一个"老大难".这个知识点就放在那,但是拖延症... 其实在平常写写脚本的过程中,这个知识点你可能用到不多 但在面试的时候,这可是一个高频问题. 一.什么是装饰 ...
- python重写和装饰器_python装饰器
python装饰器的本质,就是闭包! 我们一般谈Python的闭包,都是指普通的入参,而谈装饰器的时候,入参一定有函数!闭包和装饰器,返回的都是函数.函数是代码的最小封装单位,装饰器作用于函数,它不影 ...
- python两层装饰器_python装饰器
Python的装饰器的英文名叫Decorator,基本上适用的场景就是"装修":不涉及主流程业务,用于鉴权.审计等副业. 1.函数 在python中,函数通过def关键字.函数名和 ...
- python实现装饰器_python装饰器的实现
说起装饰器我们可能已经很熟悉了(不了解的可以查看python基础学习--装饰器),随手就可以写一个简单的装饰器 def decorator(func): def inner(*args, **kwar ...
最新文章
- win10+Linux双系统安装及一些配置问题
- python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)
- 存储空间_Tan分享 存储空间清理
- OpenCV学习之Mat::at()理解
- Laravel5.1 搭建博客 --文章的增删改查
- 中国广电设备行业十四五运营模式与投资机遇研究报告2022版
- android context继承关系,android中Context深入详解
- 2019蓝桥杯省赛---java---B---6(特别数的和)
- c#多线程操作界面控件的简单实现
- “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图
- java jdbc连接oracle数据库连接 不抛出异常,JDBC连接Oracle发生异常的原因
- php如何用菜刀连接getshell,phpmyadmin之getshell总结
- 常见的.net误解 1-1 字符串是不可修改的(immutable)
- 离线服务器系统补丁如何打,Win系统补丁要不要打?如何打补丁才最适合?
- 0基础学嵌入式:嵌入式linux视频教程免费分享!
- Affinity Photo for Mac中文破解版永久激活方法
- 第十二届蓝桥杯真题-左孩 子右兄弟(dfs)
- excel函数公式大全
- IPhone手机无法连接蓝牙
- wangEditor 5 - 修改工具栏 toolbar 默认背景色(去掉背景颜色改为透明)
热门文章
- Containerd迎来1.0通用版本
- windows下utf-8和unicode的相互转换
- leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
- 【牛客网】迷途的牛牛 C++
- 【Java 排序】重写Compare方法,实现自己定义排序
- C#中重写(override)和覆盖(new)的区别
- 汇编语言 【大练习】寻址方式在结构化访数据访问中的应用
- netty系列之:netty中的Channel详解
- 看动画学算法之:二叉搜索树BST
- java线程内存模型_深度解析Java多线程的内存模型