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 相关文章推荐
Python实现类继承实例
Jul 04 Python
python装饰器decorator介绍
Nov 21 Python
Django中使用group_by的方法
May 26 Python
浅析Python函数式编程
Oct 06 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
django orm模块中的 is_delete用法
May 20 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 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&mysql(四)
2006/10/09 PHP
用文本文件制作留言板提示(下)
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
php无限级分类实现方法分析
2016/10/19 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
python不同版本的_new_不同点总结
2020/12/09 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
广州盈通面试题
2015/12/05 面试题
《一株紫丁香》教学反思
2014/02/19 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
遗产继承公证书
2014/04/09 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
节水宣传标语口号
2015/12/26 职场文书