详解Python装饰器


Posted in Python onMarch 25, 2019

1. 定义

本质是函数,用来装饰其他函数,为其他函数添加附加功能

2. 原则

a. 不能修改被装饰函数的源代码
b. 不能修改被装饰的函数的调用方式

3. 实现装饰器知识储备

a. 函数就是变量
b. 高阶函数
    i. 把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为其添加功能
    ii. 返回值中包含函数名, 不修改函数的调用方式
c. 嵌套函数
 高阶函数+嵌套函数==》装饰器

# Author: Lockegogo

user, passwd = 'LK', '130914'
def auth(auth_type):
 print('auth func:', auth_type)
 def outher_wrapper(func):
  def wrapper(*args, **kwargs):
   print('wrapper func:', *args, **kwargs)
   if auth_type == 'local':
    username = input('username:').strip()
    password = input('password:').strip()
    if user == username and password == passwd:
     print('\033[32;1mUser has passed authentication\033[0m')
     res = func(*args, **kwargs)
     return res
    else:
     exit('\033[32;1mInvalid Username or password\033[0m')
   elif auth_type == 'ldap':
    print('ldap,不会')
  return wrapper
 return outher_wrapper

def index():
 print('welcome to index page')
@auth(auth_type='local') # home = outher_wrapper(home)
def home():
 print('welcome to home page')
 return 'from home'
@auth(auth_type='ldap')
def bbs():
 print('welcome to bbs page')

index()
print(home())
bbs()

Decorator

以上所述是小编给大家介绍的Python装饰器详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中os和shutil模块实用方法集锦
May 13 Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python微信操控itchat的方法
May 31 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
python实现手机推送 代码也就10行左右
Apr 12 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 #Python
Python3.5实现的三级菜单功能示例
Mar 25 #Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 #Python
Python for循环与range函数的使用详解
Mar 23 #Python
详解Python读取yaml文件多层菜单
Mar 23 #Python
详解Python数据分析--Pandas知识点
Mar 23 #Python
详解Python基础random模块随机数的生成
Mar 23 #Python
You might like
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
<script defer> defer 是什么意思
2009/05/10 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
python3实现表白神器
2019/04/09 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
小学生一分钟演讲稿
2014/08/26 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python