详解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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python实现简易版的Web服务器(推荐)
Jan 29 Python
python监控键盘输入实例代码
Feb 09 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
20行python代码的入门级小游戏的详解
May 05 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
Django Model中字段(field)的各种选项说明
May 19 Python
Python如何安装第三方模块
May 28 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
python如何提升爬虫效率
Sep 27 Python
Python就将所有的英文单词首字母变成大写
Feb 12 Python
一行Python命令实现批量加水印
Apr 07 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
当海贼王变成JOJO风
2020/03/02 日漫
基于PHP异步执行的常用方式详解
2013/06/03 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
python 字符串和整数的转换方法
2018/06/25 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python3中编码获取网页的实例方法
2020/11/16 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
会计学个人自荐信模板
2013/12/13 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
八年级美术教学反思
2014/02/02 职场文书
先进集体事迹材料
2014/02/17 职场文书
董存瑞观后感
2015/06/11 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server