Python-装饰器

def func1(age):
    print ("%d"%(age))
    
//如果直接打印-10是没有问题,但是年龄不肯为负数
//而且我也不想修改原有的方法就可以弄一个装饰器

func1(-10)


//装饰器:把func1整个包装一层

def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner

//func2 就是func1包装后的新方法
func2 = outer(func1)

//然后再次传入-10
func2(-10)

打印结果:
第一次没有包装过的打印是-10
第二次包装过打印 0;


以上方法可以进行优化:

利用“@” 如下 在func1上加一个@ outer

def outer(func):
   def inner(age):
       if age < 0:
           age = 0
       func(age)
   return inner


@outer
def func1(age):
   print ("%d"%(age))

func1(-10)

万能装饰器:


def outer(func):
    def inner(*args,**kwargs):
    # 可以在这里添加修改功能
        func(*args,**kwargs)
    return inner


@outer
def func1(age,sex):
    print ("%d %s"%(age,sex))

func1(-10,"男")
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容