Python-装饰器

2018-08-01  本文已影响0人  一个老实人
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,"男")
上一篇 下一篇

猜你喜欢

热点阅读