详解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访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Pytorch可视化的几种实现方法
Jun 10 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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
ftp类(example.php)
2006/10/09 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
PHP在线书签系统分享
2016/01/04 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
详解Python中dict与set的使用
2015/08/10 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
监察建议书范文
2014/03/12 职场文书
十佳护士先进事迹
2014/05/08 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python