Python 装饰器(装饰器的简单使用)
简单介绍了装饰器的一些基本内容,包含定义、本质、原则、如何实现。
1、装饰器的定义
定义:一种增加函数功能的简单方法,可以快速地给不同的函数或类插入相同的功能。
简单点就是:高阶函数+嵌套函数 -》装饰器
2、装饰器本质
本质:函数 ,为其他函数进行装饰。
举个例子,现在有小狗100只,都有吃喝拉撒的功能,此时我想给其中50只小狗戴上装饰帽的功能,这个装饰帽就是装饰器的功能。但是它并不会改变小狗本身原有的功能。
3、装饰器的原则
原则1:不能修改被装饰的函数的源代码
原则2: 不能修改被装饰的函数的调用方式
4、装饰器的实现
大致了解需要有3个步骤:
4.1 函数即变量
4.2 高阶函数
4.3 嵌套函数
举个例子,装饰器count_time()函数实现对one()函数添加统计函数运行时间的功能
import time
def count_time(func):
def deco():
start = time.time()
func()
end = time.time()
print("the func run time is %s" %(end-start))
return deco
@count_time
//通过语法糖@count_time 直接对one()函数添加统计时间的功能
def one():
time.sleep(0.5)
print('in the one')
详细步骤如下:
4.1函数即变量
举个例子,比如把1赋值给x,内存会为x分配地址,且指向1 ;
此时x赋值给y,y同时也指向1;

同理,定义一个test()函数后,调用这个函数test(),内存会为这个函数分配一个地址,并指向函数体 
4.2 高阶函数
高阶函数一句话理解:函数中的变量包含函数。
A:把一个函数名当做实参传给另外一个函数(在不修改被装饰函数的源代码情况下为其添加功能)
B:返回值中包含函数名(不修改函数的调用方式)
举个例子,高阶函数代码如下:
import time
def count_time(func):
def deco():
start = time.time()
func()
end = time.time()
print("the func run time is %s" %(end-start))//程序运行时间:结束时间减去开始时间
return deco
4.3 嵌套函数
很简单的一句话:嵌套函数表示的是函数里面有函数。
举个例子,one()函数中嵌套two()函数,嵌套函数代码如下
def one():
print('in the one')
def two():
print('in the two')
two()
#调用函数
one()
5、装饰器高级实现
装饰器涉及到有参数的语法糖、无参数的语法糖,后续有时间可以再次进行详细的了解~
user = 'xxx'
password = '123456'
def A(B):
print("B:",B)
def outer_wrapper(func):
def wrapper(*args, **kwargs):
print("wrapper func args:", *args, **kwargs)
if B == "bb":
user_name = input("Username:")
pass_word = input("Password:")
if user == user_name and password == pass_word:
print("User has passed authentication")
ret = func(*args, **kwargs)
print("---after authenticaion ")
return ret
else:
exit("Invalid username or password")
elif B == "QWW":
print("have question")
return wrapper
return outer_wrapper
def one():
print("in the one") @A(B="bb")
def two():
print("in the two")
return " I'm two" @A(B="QWW")
def three():
print("in the three") one()
print(two())
three()
Python 装饰器(装饰器的简单使用)的更多相关文章
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python中的装饰器的简单介绍02
这篇博文转载自伯乐在线的12步轻松搞定python装饰器,重构成python3. 1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例 ...
- python高级之装饰器
python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- python中的装饰器
一.什么是装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能 ...
- Python深入05 装饰器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- 第二篇:python高级之装饰器
python高级之装饰器 python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...
- 理解Python中的装饰器
文章先由stackoverflow上面的一个问题引起吧,如果使用如下的代码: @makebold @makeitalic def say(): return "Hello" 打印出 ...
随机推荐
- jQuery其他事件
ready(fn)当DOM载入就绪可以查询及操作时,绑定一个要执行的函数. resize([[data],fn])当调整浏览器窗口的大小时,发生resize事件.它属于BOM中的window对象. f ...
- ostringstream、istringstream、stringstream(转)
看一下C++风格的串流控制,C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istring ...
- 精尽MyBatis源码分析 - MyBatis初始化(二)之加载Mapper接口与XML映射文件
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- Cassandra存储附带索引(SAI)全新上线
新一代Apache Cassandra索引现已在Astra和DataStax Enterprise 6.8.3中正式开放使用 (general availability or GA),很快您也将在开源 ...
- Linux学习 - 02 使用 - Centos8 - 网络配置相关
『Centos8 网络配置』 题外话:最近太忙,利用仅有的周末空闲时间记录点东西,草率了. 问题1:安装 Centos8.2 minimal 过程中,只是设置了 WiFi的静态IP,没有进行[以太网] ...
- 面经分享!蚂蚁金服三面被拒,重拾起鼓四面猿辅导成功拿下offer!
前言 一直有小伙伴要我分享面经,说自己想面互联网公司,无奈经验太少想多看看其他人是怎么面的.我这两天刚好和一个刚拿到猿辅导offer的朋友吃了个饭,他向我说了说自己的面试经历.粉丝朋友是末流211毕业 ...
- 深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?
SpringBoot异常处理 简介 日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管.这种 ...
- 左右声道音频怎么制作,用Vegas就对啦
一款优秀的视频剪辑软件,不仅有高水平的视频制作功能,它的音频编辑功能也是必不可少的.Vegas就是这么一款软件,同时具备视频制作特效制作的同时,还能帮助制作轨道音频效果. 下面,就让小编带大家去学习, ...
- 永别了,Dota2!
永别了,Dota2 .输了游戏,我还有人生! 游戏中,总有那些喷子,自己玩的不好,经常说人家! 和大便打架,即使赢了,身上也非常臭! 所以对于这种人,敬而远之即可!不吵不闹,默默把锅扛起!赢了,就好说 ...
- Java基础教程——Stream
Stream流 Java 8 API添加了一种新的机制--Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...