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 urllib爬取百度云连接的实例代码
Jun 19 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
基于python实现名片管理系统
Nov 30 Python
Python模块的加载讲解
Jan 15 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 Python
Python计算公交发车时间的完整代码
Feb 12 Python
利用python在excel中画图的实现方法
Mar 17 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
跟老齐学Python之永远强大的函数
2014/09/14 Python
python下MySQLdb用法实例分析
2015/06/08 Python
python冒泡排序简单实现方法
2015/07/09 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
pandas取出重复数据的方法
2019/07/04 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
大学生创业计划书的格式要求
2013/12/29 职场文书
班会关于环保演讲稿
2013/12/29 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
市场营销调查计划书
2014/05/02 职场文书
篮球社团活动总结
2014/06/27 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
老公保证书怎么写
2015/02/26 职场文书
《海上日出》教学反思
2016/02/23 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Python Django ORM连表正反操作技巧
2021/06/13 Python
Go获取两个时区的时间差
2022/04/20 Golang
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server