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在校内发人人网状态(人人网看状态)
Feb 19 Python
在Python中使用poplib模块收取邮件的教程
Apr 29 Python
Python对数据库操作
Mar 28 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python实现爬山算法的思路详解
Apr 09 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
python绘制高斯曲线
Feb 19 Python
OpenCV-Python实现油画效果的实例
Jun 08 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
javascript列表框操作函数集合汇总
2013/11/28 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
js实现下一页页码效果
2017/03/07 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
Python中super的用法实例
2015/05/28 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
《回乡偶书》教学反思
2014/04/12 职场文书
环保建议书300字
2014/05/14 职场文书
同志主要表现材料
2014/08/21 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
单位工资证明范本
2015/06/12 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang