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 相关文章推荐
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
微信跳一跳游戏python脚本
Apr 01 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
python清除函数占用的内存方法
Jun 25 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
详解用Python练习画个美队盾牌
Mar 23 Python
Python实现插入排序和选择排序的方法
May 12 Python
python如何实现视频转代码视频
Jun 17 Python
python实现超级马里奥
Mar 18 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
js实现微信聊天界面
2020/08/09 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python多进程间通信代码实例
2019/09/30 Python
python实现横向拼接图片
2020/03/23 Python
Django使用rest_framework写出API
2020/05/21 Python
python实现学生成绩测评系统
2020/06/22 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
八年级语文教学反思
2014/02/11 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
红色影片观后感
2015/06/18 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技