详解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 相关文章推荐
基于wxpython开发的简单gui计算器实例
May 30 Python
python3.5仿微软计算器程序
Mar 30 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
django+js+ajax实现刷新页面的方法
May 22 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Python求解排列中的逆序数个数实例
May 03 Python
关于Keras Dense层整理
May 21 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 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 分页分组类
2009/12/10 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
关于js datetime的那点事
2011/11/15 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python保存字符串到文件的方法
2015/07/01 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
判断单链表中是否存在环
2012/07/16 面试题
学校与家长安全责任书
2014/07/23 职场文书
普通话演讲稿
2014/09/03 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书