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中操作字典之fromkeys()方法的使用
May 21 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
python读取hdfs并返回dataframe教程
Jun 05 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
php判断是否为json格式的方法
2014/03/04 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python中的两个内置模块介绍
2015/04/05 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
自我鉴定范文300字
2013/10/01 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
小组合作学习反思
2014/02/18 职场文书
村级个人对照检查材料
2014/08/22 职场文书
面试通知单大全
2015/04/20 职场文书
微观世界观后感
2015/06/10 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python