Python新手学习装饰器

 更新时间:2020年06月04日 08:17:28   作者:爱喝马黛茶的安东尼  
在本篇文章里小编给大家整理的是一篇关于Python装饰器的相关知识点内容,需要的朋友们可以学习下。

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多进程程序打包成exe的问题

    python多进程程序打包成exe的问题

    这篇文章主要介绍了python多进程程序打包成exe的问题的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python-基础-入门 简介

    Python-基础-入门 简介

    这篇文章主要介绍了Python-基础-简介入门的相关资料,需要的朋友可以参考下
    2014-08-08
  • 基于Python实现自动关机小工具

    基于Python实现自动关机小工具

    上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。今天使用PyQt5做了个自动关机的小工具,设置好关机时间然后直接提交即可,需要的可以参考一下
    2022-10-10
  • Python Pandas中创建Series的三种方法总结

    Python Pandas中创建Series的三种方法总结

    这篇文章主要介绍了Python Pandas中创建Series的三种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python实现迷宫自动寻路实例

    Python实现迷宫自动寻路实例

    大家好,本篇文章主要讲的是Python实现迷宫自动寻路实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Python利用pyHook实现监听用户鼠标与键盘事件

    Python利用pyHook实现监听用户鼠标与键盘事件

    这篇文章主要介绍了Python利用pyHook实现监听用户鼠标与键盘事件,很有实用价值的一个技巧,需要的朋友可以参考下
    2014-08-08
  • Python可变参数函数用法实例

    Python可变参数函数用法实例

    这篇文章主要介绍了Python可变参数函数用法,实例分析了Python可变参数函数的定义与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python使用GitPython操作Git版本库的方法

    Python使用GitPython操作Git版本库的方法

    这篇文章主要介绍了Python使用GitPython操作Git版本库的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python通配符之glob模块的使用详解

    python通配符之glob模块的使用详解

    这篇文章主要介绍了python通配符之glob模块的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • python中文分词+词频统计的实现步骤

    python中文分词+词频统计的实现步骤

    词频统计就是输入一段句子或者一篇文章,然后统计句子中每个单词出现的次数,下面这篇文章主要给大家介绍了关于python中文分词+词频统计的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论