Python中的装饰器

Posted 天行健君子自强不息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Python中的装饰器的主要内容,如果未能解决你的问题,请参考以下文章

类中的装饰器在Pycharm中抛出警告

Python中的装饰器之写一个装饰器

python装饰器了解

06-python中的装饰器

类中的Python装饰器

python中的装饰器