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 ...
最新文章
- 丁磊:噢买尬,买它,华少别抢话
- 人工神经网络_图像加载(数据挖掘入门与实践-实验10)
- liferay 调用ajax
- jshell的安装使用
- LA 3458——Bridge
- 加快脑动脉瘤检测,AI来了
- KMPBoyer-Moore
- 2012.4.19总结(二)
- SpringCloud学习笔记(15)----Spring Cloud Netflix之Hystrix Dashboard的使用
- Centos7下编译安装Nginx、Mysql、PHP(文章底部包含一键安装脚本)
- 达观数据助力浙江大华构建企业级知识搜索共享平台,盘活沉淀数据
- java通过winrm实现remote powershell
- html怎样使图片自动旋转,css怎么让图片旋转?
- 火山引擎虚拟数字人技术与应用
- java 分页导出word_Java导出Word问题
- R学习连续变量之间的关系
- 微信公众号 Markdown 编辑器
- warcraft 3 经典语句之月之女祭司(Priestess of the moon)
- Linux服务器挂掉,使之自动重启脚本
- 用C#实现竖列转盘游戏
热门文章
- 2017年最流行的15个数据科学Python库
- Serverless,后端小程序的未来
- Vue002_计算属性和监视
- 利剑无意之如何判断一个数在40亿个整数中
- 5W字高质量java并发系列详解教程(上)-附PDF下载
- SpringBoot中的响应式web应用
- leetcode -- 357. Count Numbers with Unique Digits
- 【通俗易懂】C语言中,for循环中i++与++i的区别
- 报错:out cannot be resolved【已解决】
- 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)