千家信息网

怎么应用python装饰器

发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,本篇内容主要讲解"怎么应用python装饰器",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么应用python装饰器"吧!什么是装饰器从字面意思上来看,装
千家信息网最后更新 2025年01月29日怎么应用python装饰器

本篇内容主要讲解"怎么应用python装饰器",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么应用python装饰器"吧!

什么是装饰器

从字面意思上来看,装饰器是用来装饰其他东西的工具。在python中装饰器分为函数装饰器和类装饰器。
简而言之,函数装饰器是用来装饰函数的装饰器,其主要目的是增加目标函数的功能,类装饰器也就是装饰类的装饰器,增加类的功能。

函数装饰器

装饰器本质是嵌套函数
下面是一个简单的装饰器

# fun1为装饰器名称,function指的是被装饰的函数def fun1(function):        def fun2():                print("开始了!")                function() # 执行被装饰的函数或者 或者 return function()        return fun2

外面的fun1()需要传入一个参数,这个参数是用来传入要被装饰的函数,里面的fun2()需要执行function这个参数。
这是将函数当成参数传入另一个函数。

使用方法:
在需要装饰的函数上添加@装饰器名称

@fun1def fun3():        print("aaa")fun3()

可以等价成这样:

def fun3():        print("aaa")fun = fun1(fun3)fun()

输出结果是一致的

执行结果:

开始了!
aaa

如果传入的函数需要参数可以这样写:

def fun1(function):        def fun2(a):                print("开始了!")                function(a)         return fun2@fun1def fun3(a):        print(a)fun3("aaa")

输出结果:

开始了!
aaa

如果不清楚传入的函数需要多少个参数,可以这样写:

def fun1(function):        def fun2(*args, **kwargs):                print("开始了!")                function(*args, **kwargs)         return fun2@fun1def fun3(a,b):        print(a,b)@fun1   def fun4(a,b,c):    print(a,b,c)    fun3("aaa","bbb")fun4("ccc","ddd","eee")

运行结果:

开始了!
aaa bbb
开始了!
ccc ddd eee

如果函数装饰器需要添加参数,可以这样写:

def fun(msg):        def fun1(function):                def fun2(*args, **kwargs):                        print("开始了!{}".format(msg))                        function(*args, **kwargs)                 return fun2        return fun1@fun(msg="小朋友")def fun3(a,b):        print(a,b)fun3("aaa","bbb")

运行结果:

开始了!小朋友
aaa bbb

类装饰器

类装饰器的用法基本和函数装饰器一样,只不过是用类写的装饰器

class fun1(object):    def __init__(self, func):        self.func = func    def __call__(self, *args, **kwargs):        print(("开始了!")        self.func(*args, **kwargs)@fun1def fun2(a,b):        print(a,b)fun2("aaa","bbb")

类装饰用到了类的__call__方法

运行结果:

开始了!
aaa bbb

还可以这样写:

class fun(object):    def __init__(self, msg):        self.msg = msg            def __call__(self, func):        def fun1(*args, **kwargs):            print("开始了!{0}".format(self.msg))            func(*args, **kwargs)        return fun1@fun(msg="小朋友")def fun2(a, b):    print(a, b)fun2("aaa,","bbb")

运行结果:

开始了!小朋友
aaa, bbb

到此,相信大家对"怎么应用python装饰器"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0