详解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 01 Python
Python3读取文件常用方法实例分析
May 22 Python
Python smallseg分词用法实例分析
May 28 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
Python下载指定页面上图片的方法
May 12 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
python集合是否可变总结
Jun 20 Python
使用Python进行防病毒免杀解析
Dec 13 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
javascript操作数组详解
2014/12/17 Javascript
js实现拖拽效果
2015/02/12 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
基于Python实现简单学生管理系统
2020/07/24 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
论群众路线学习心得体会
2014/10/31 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB