详解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中pip安装非PyPI官网第三方库的方法
Jun 02 Python
判断网页编码的方法python版
Aug 12 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python批量创建指定名称的文件夹
Mar 21 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python字典改变value值方法总结
Jun 21 Python
python dumps和loads区别详解
Feb 04 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
用pip给python安装matplotlib库的详细教程
Feb 24 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中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
JS跨域问题详解
2014/11/25 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
有兼职工作经历的简历自我评价
2014/03/07 职场文书
公司保密承诺书
2014/03/27 职场文书
高考励志标语
2014/06/05 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android