详解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选择排序算法的实现代码
Nov 21 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python下简易的单例模式详解
Apr 08 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
简单了解python的break、continue、pass
Jul 08 Python
python 命令行传入参数实现解析
Aug 30 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
python中super()函数的理解与基本使用
Aug 30 Python
Python加密技术之RSA加密解密的实现
Apr 08 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 过滤危险html代码
2009/06/29 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
joomla组件开发入门教程
2016/05/04 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
初探nodeJS
2017/01/24 NodeJs
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
Python快速排序算法实例分析
2017/11/29 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
英文简历中的自我评价
2013/10/06 职场文书
总经理职责
2013/12/22 职场文书
教师现实表现材料
2014/02/14 职场文书
业务员辞职信范文
2015/03/02 职场文书
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python