zoukankan      html  css  js  c++  java
  • Python中的装饰器

    装饰器的详解

    装饰器的作用

      在不修改原有函数的基础之上添加指定的功能属性;主要应用与开放封闭原则中。

    示例

    import time
    def timmer(f):          #装饰器函数
        def inner():
            start = time.time()
            ret = f()       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    # @timmer               #语法糖 @装饰器函数名
    def func():             #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好')
        return '新年好'
    func = timmer(func)
    ret = func()
    print(ret)
    View Code

    装饰器的使用情景

    情景1:基本装饰器

    import time
    def wrapper(func):
        def funct():
            start = time.time()
            func()
            end = time.time()
        return funct
    
    def func():
        time.sleep(0.5)
        print('test')
    
    func = wrapper(func)
    func()

    情景2:强化装饰器-有返回的装饰器

    import time
    def wrapper(func):
        def Wrapper():
            start = time.time()
            ret = func()
            end = time.time()
            return ret
        return Wrapper
    
    @wrapper
    def func():
        time.sleep(0.5)
        print('hello world')
        return 'HELLO WORLD'
    Func = wrapper(func)
    print(Func())

    情景3:强化装饰器-有一个参数

    import time
    def timmer(f):    #装饰器函数
        def inner(*args):
            #(1,2) /(1)
            start = time.time()
            ret = f(*args)  #f(1,2)       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    
    @timmer         #语法糖 @装饰器函数名
    def func(a):     #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好',a)
        return '新年好'
    ret = func(1)
    print(ret)

    情景4:强化装饰器-有无穷参数

    import time
    def timmer(f):    #装饰器函数
        def inner(*args,**kwargs):
            #(1,2) /(1)
            start = time.time()
            ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
            end = time.time()
            print(end - start)
            return ret
        return inner
    
    @timmer         #语法糖 @装饰器函数名
    def func(a,b):     #被装饰的函数
        time.sleep(0.01)
        print('老板好同事好大家好',a,b)
        return '新年好'
    ret = func(1,b = 2)
    print(ret)

    装饰器的固定模式

    def wrapper(func):   #qqxing
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)   #被装饰的函数
            return ret
        return inner
  • 相关阅读:
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    【opencv基础】imwrite函数与图像存储质量
    【c++基础】从json文件提取数据
    【图像处理基础】LBP特征
    【机器学习基础】SVM实现分类识别及参数调优(二)
    【leetcode】14-LongestCommonPrefix
    【leetcode】13-Roman2Integer
    【leetcode】9-PalindromeNumber
    【leetcode】7-ReverseInteger
  • 原文地址:https://www.cnblogs.com/guge-94/p/10449343.html
Copyright © 2011-2022 走看看