zoukankan      html  css  js  c++  java
  • python 20day--装饰器详解

    一、装饰器的概念

    1、什么 是装饰器:本质就是函数,功能是为其他函数添加新功能

    装饰器即函数,装饰即修饰,意指为其他函数添加新功能

    2、装饰器需要遵循的原则:

    不修改被装饰函数的源代码(开放封闭原则)

    为被装饰函数添加新功能后,不修改被修饰函数的调用方式

    3、实现装饰器的知识储备:

    装饰器=高阶函数+函数嵌套+函数闭包+语法糖

    4、装饰器举例:为test()函数加上计算函数运行时间的装饰器,此装饰器为无参装饰器

     1 import time
     2 def timer(func):
     3     def wrapper():
     4         start = time.time()
     5         res = func()
     6         stop = time.time()
     7         print('runtime is %s'%(stop-start))
     8         return func
     9     return wrapper
    10 @timer
    11 def test():
    12     time.sleep(1)
    13     print('from test')
    14 test()

    二、高阶函数

    函数的参数是一个函数,返回值是一个函数

    三、函数嵌套

    函数的内部又定义了一个函数

    四、函数闭包

    在一个作用域里放入定义变量,相当于打了一个包;相当于往大箱子里面装小箱子

     五、装饰器的应用(语法糖):

    @timer 就是装饰器的语法糖,相当于执行了   test = timer(test)

    装饰器=高阶函数+函数嵌套+函数闭包+语法糖

    带参装饰器举例:为函数加上简单的验证功能:

     1 import time
     2 qujubianliang = {"username":None,"login":False}
     3 def auth_func(func):
     4     def wrapper(*args,**kwargs):
     5         if qujubianliang["username"] and qujubianliang["login"]:
     6             res = func(*args, **kwargs)
     7             return res
     8         username = input("yonghuming").strip()
     9         passwd = input("mima").strip()
    10         if username=="sb" and passwd=="123":
    11             qujubianliang["username"]=username
    12             qujubianliang["login"]=True
    13             res = func(*args,**kwargs)
    14             print(' i am wrapper')
    15             return res
    16         else :
    17             print('passwd is wrong')
    18 
    19     return wrapper
    20 @auth_func
    21 def index():
    22     print("welcome to jd")
    23 @auth_func
    24 def home():
    25     print("welcome to home")
    26 @auth_func
    27 def shopping_car(name):
    28     print('%s shopping_car has meimei'%name)
    29 index()
    30 home()
    31 shopping_car('alex')
  • 相关阅读:
    什么样的基础设施适合快速和大数据架构?
    四大关键步骤掌握CloudOps模型
    容器技术适合你的企业吗
    内存压缩PK页面交换 解决内存问题谁更在行
    内存共享和过量使用区别在哪里
    网络策略中使用的 VLAN 属性
    四大VDI客户端 总有一款适合你
    使用Windows SFC和DISM工具来解决服务器OS问题
    远程 RADIUS 服务器组
    excel知识
  • 原文地址:https://www.cnblogs.com/yuzhiboyou/p/10153792.html
Copyright © 2011-2022 走看看