详解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数据结构之二叉树的遍历实例
Apr 29 Python
跟老齐学Python之集成开发环境(IDE)
Sep 12 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
python3下pygame如何实现显示中文
Jan 11 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
python实现Thrift服务端的方法
Apr 20 Python
python 网络编程要点总结
Jun 18 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编写PDF文档生成器
2006/10/09 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
vue中监听返回键问题
2019/08/28 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python中max函数用法实例分析
2015/07/17 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
使用Python的turtle模块画国旗
2019/09/24 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
岗位竞聘书范文
2014/03/31 职场文书
作文批改评语大全
2014/04/23 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书