类的学习笔记(3)——自定义装饰器及装饰器的理解

在学习装饰器之前,请先学习内嵌函数和闭包,装饰器其实就是闭包的特例,而闭包是内嵌函数实现的。学习内嵌函数与闭包:https://blog.csdn.net/huang1600301017/article/details/84111877

例一: 实现多加100

def fun1(x):
     def fun2(y):
          return x(y)+100
      return fun2              #装饰器

def ff(y):
      return y*y           ff(4)=16

@fun1              此时fun1相当于执行了     ff= fun1(ff)  #x=ff
def ff(y):
      return y*y          ff(4)=116

例二:  实现过滤非整数型的参数,使能够实现多数相加

def filterarg(func):
     def fit(*arg):
          if len(arg) ==0:
             return 0
           for i in arg:
               if not isinstance(i,int):
                  return 0
            return func(*arg)
        return fit                 #装饰器

@filterarg
def sums(*arg):
    return sum(arg)       *的作用是将多个参数整合成列表,是指能够让sum(arg)运行。注意,sum(arg)中只能传一个参数,这个参数可以是列表,sum([1,2,3])=6.   sum(1,2,3)报错

def ff1(x):
    def ff2(y):
        return x(y)+1
    return ff2

def ffn(m):
    return m*m

ffn = ff1(ffn)   #相当于装饰了,这个就相当于@ff1
'''
运行结果:ffn(3)=10   ,相当于ffn(3)+1
如果t = ff1(ffn)  则 t(3)=10.此时t就是一个函数对象,t() = ff2()
'''

上面两个实例仅仅供理解学习用,实际功能不大。

你可能感兴趣的:(python学习笔记)