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 base64编码解码实例
Jun 21 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
对于Python深浅拷贝的理解
Jul 29 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
用Python进行栅格数据的分区统计和批量提取
May 27 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
Python实现完整的事务操作示例
2017/06/20 Python
python实现内存监控系统
2021/03/07 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
python上selenium的弹框操作实现
2020/07/13 Python
python 实现波浪滤镜特效
2020/12/02 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
白酒业务员岗位职责
2013/12/27 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
毕业实习评语
2014/02/10 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
信用卡工作证明模板
2014/09/14 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python