zoukankan      html  css  js  c++  java
  • 如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰

    需求:定义一个装饰器,既可以装饰有参数的方法,又可以装饰没有参数的方法,既可以装饰有返回值的方法,又可以装饰没有返回值的方法

    代码如下:

    def decorate(test):             #定义一个装饰器函数
    
        def bold(*args,**kwargs):           #*args可以接收任意多个参数,**kwargs可以接受任意多个字典参数
    
            print('style="font-weight:blod"')  # 替换成你自己的代码
    
            res = test(*args,**kwargs)   #这样写,即使被装饰的test函数没有参数或者没有返回值都没关系,不会报错
    
            return res             #test函数有返回值就返回,没有就返回None
    
        return bold

    以上的代码就完成了python万能装饰器的写法,(*args,**kwargs)可以接收任意个数任意类型的参数,有没有返回值都可以return。修改print这句话为自己想要的功能,就是自己的万能装饰器了。这样一来,就可以装饰任意的函数了。

    测试一下上面的代码:

    @decorate               #装饰一个没有任何参数没有返回值的方法
    def test1():
        print("test1:没有参数,没有返回值")     
    
    
    @decorate               #装饰一个有一个参数的方法
    def test2(name):
        print("test2:带参数%s"%name)
    
    
    @decorate         #装饰一个有返回值的方法
    def test3():
            strs = "test3:带返回值"
            return strs
    
    
    test1()               
    #结果为:

    #style="font-weight:blod"
    #test1:没有参数,没有返回值 test2("ss")
    #结果为:

    #style="font-weight:blod"
    #test2:带参数ss a = test3() print(a)
    #结果为:
    #style="font-weight:blod"
    #test3:带返回值
  • 相关阅读:
    深度探索C++对象模型之第一章:关于对象之对象的差异
    深度探索C++对象模型之第一章:关于对象之关键词所引起的差异
    C++之constexpr
    STL之空间配置器
    10泛型算法
    C++之指针与数组区别
    数学 之 hdu 4861
    贪心 之 hdu 4864
    01背包(求前一个的最大价值-->求前K个的最大价值) 之 hdu 2639
    01背包(体积为负,改变区间) 之 poj 2184
  • 原文地址:https://www.cnblogs.com/sy_test/p/12054068.html
Copyright © 2011-2022 走看看