Python新手学习装饰器


Posted in Python onJune 04, 2020

python函数式编程之装饰器

1.开放封闭原则

简单来说,就是对扩展开放,对修改封闭。

在面向对象的编程方式中,经常会定义各种函数。一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用。这意味着如果函数的定义阶段代码被修改,受到影响的地方就会有很多,此时很容易因为一个小地方的修改而影响整套系统的崩溃,所以对于现代程序开发行业来说,一套系统一旦上线,系统的源代码就一定不能够再改动了。然而一套系统上线以后,随着用户数量的不断增加,一定会为一套系统扩展添加新的功能。

此时,又不能修改原有系统的源代码,又要为原有系统开发增加新功能,这就是程序开发行业的开放封闭原则,这时就要用到装饰器了。

2.什么是装饰器

装饰器,顾名思义,就是装饰,修饰别的对象的一种工具。

所以装饰器可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象。

3.装饰器的作用

在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能。

原则:

1.不修改被装饰对象的源代码

2.不修改被装饰对象的调用方式

目标:

为被装饰对象添加新功能。

实例扩展:

import time
# 装饰器函数
def wrapper(func):
 def done(*args,**kwargs):
  start_time = time.time()
  func(*args,**kwargs)
  stop_time = time.time()
  print('the func run time is %s' % (stop_time - start_time))
 return done
# 被装饰函数1
@wrapper
def test1():
 time.sleep(1)
 print("in the test1")
# 被装饰函数2
@wrapper
def test2(name): #1.test2===>wrapper(test2) 2.test2(name)==dome(name)
 time.sleep(2)
 print("in the test2,the arg is %s"%name)
# 调用
test1()
test2("Hello World")

不含参数实例:

import time
user,passwd = 'admin','admin'
def auth(auth_type):
 print("auth func:",auth_type)
 def outer_wrapper(func):
  def wrapper(*args, **kwargs):
   print("wrapper func args:", *args, **kwargs)
   if auth_type == "local":
    username = input("Username:").strip()
    password = input("Password:").strip()
    if user == username and passwd == password:
     print("\033[32;1mUser has passed authentication\033[0m")
     res = func(*args, **kwargs) # from home
     print("---after authenticaion ")
     return res
    else:
     exit("\033[31;1mInvalid username or password\033[0m")
   elif auth_type == "ldap":
    print("ldap链接")
  return wrapper
 return outer_wrapper
@auth(auth_type="local") # home = wrapper()
def home():
 print("welcome to home page")
 return "from home"
@auth(auth_type="ldap")
def bbs():
 print("welcome to bbs page"
print(home()) #wrapper()
bbs()

到此这篇关于Python新手学习装饰器的文章就介绍到这了,更多相关Python之装饰器简介内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Pycharm学习教程(1) 定制外观
May 02 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
python实现内存监控系统
Mar 07 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 Python
基于python 取余问题(%)详解
Jun 03 #Python
Python中关于logging模块的学习笔记
Jun 03 #Python
Python学习之os模块及用法
Jun 03 #Python
Python爬虫HTPP请求方法有哪些
Jun 03 #Python
什么是Python变量作用域
Jun 03 #Python
Python Flask框架实现简单加法工具过程解析
Jun 03 #Python
python自定义函数def的应用详解
Jun 03 #Python
You might like
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
使用js画图之画切线
2015/01/12 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python中tell()方法的使用详解
2015/05/24 Python
Python选课系统开发程序
2016/09/02 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
python实时监控cpu小工具
2018/06/21 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
高中生毕业自我鉴定范文
2013/12/22 职场文书
大学社团活动总结
2014/04/26 职场文书
小学庆六一活动总结
2014/08/28 职场文书
保卫工作个人总结
2015/03/03 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
公司年会主持词范文!
2019/05/07 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python