详解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读写Redis数据库操作示例
Mar 18 Python
Python中IPYTHON入门实例
May 11 Python
python 系统调用的实例详解
Jul 11 Python
scrapy爬虫完整实例
Jan 25 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python pycurl验证basic和digest认证的方法
May 02 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
python之基数排序的实现
Jul 26 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/10/16 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
JS实现多选框的操作
2020/06/24 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python面向对象特殊成员
2017/04/24 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Pyqt5自适应布局实例
2019/12/13 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
酒店开业庆典主持词
2014/03/21 职场文书
践行三严三实心得体会
2014/10/13 职场文书
离职证明范本
2015/06/12 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python
Flask response响应的具体使用
2021/07/15 Python
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
MSSQL基本语法操作
2022/04/11 SQL Server
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS