详解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 17 Python
python函数局部变量用法实例分析
Aug 04 Python
python enumerate函数的使用方法总结
Nov 15 Python
Python中optparser库用法实例详解
Jan 26 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
对python模块中多个类的用法详解
Jan 10 Python
django的ORM模型的实现原理
Mar 04 Python
python使用百度文字识别功能方法详解
Jul 23 Python
Django中提供的6种缓存方式详解
Aug 05 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
python 3.8.3 安装配置图文教程
May 21 Python
Python实现简单得递归下降Parser
May 02 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
索趣科技的答案
2007/02/07 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
优秀党支部事迹材料
2014/01/14 职场文书
春节晚会主持词
2014/03/24 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python如何加载模型并查看网络
2022/07/15 Python