详解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使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python中为什么要用self探讨
Apr 14 Python
遗传算法之Python实现代码
Oct 10 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
对python中各个response的使用说明
Mar 28 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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
php获取参数的几种方法总结
2014/02/18 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
javascript 写类方式之六
2009/07/05 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python中正则表达式的详细教程
2015/04/30 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
在校实习生求职信
2014/06/18 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
小学校长汇报材料
2014/08/20 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
学习普通话的体会
2014/11/07 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
结婚幸福感言
2015/08/01 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL