详解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中使用select模块实现非阻塞的IO
Feb 03 Python
python处理csv数据的方法
Mar 11 Python
浅谈Django REST Framework限速
Dec 12 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Python3 log10()函数简单用法
Feb 19 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
python for循环remove同一个list过程解析
Aug 14 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 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中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python中http请求方法库汇总
2016/01/06 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python实现LRU热点缓存及原理
2019/10/29 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
python调用百度API实现人脸识别
2020/11/17 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
协议书范文
2015/01/27 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang