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 sort、sorted高级排序技巧
Nov 21 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
Python字符串切片操作知识详解
Mar 28 Python
python3字符串操作总结
Jul 24 Python
Django的Modelforms用法简介
Jul 27 Python
django-rest-swagger的优化使用方法
Aug 29 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
Python 如何批量更新已安装的库
May 26 Python
详解python如何引用包package
Jun 07 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作的文本留言本的例子(二)
2006/10/09 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python新手入门最容易犯的错误总结
2017/04/24 Python
python PyTorch预训练示例
2018/02/11 Python
python实现最长公共子序列
2018/05/22 Python
更新修改后的Python模块方法
2019/03/03 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python定时器线程池原理详解
2020/02/26 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
中层干部岗位职责
2013/12/18 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
2014年班干部工作总结
2014/11/25 职场文书
总经理司机岗位职责
2015/04/10 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript