Python 利用装饰器检测函数参数

来源:互联网 发布:中国房地产 知乎 编辑:程序博客网 时间:2024/05/17 04:03

学习python时看到有关装饰器的相关知识。参考博客http://www.cnblogs.com/huxi/archive/2011/03/31/2001522.html的思想自己也写了一个函数参数检测的装饰器,当然写的比较简单,只有几项功能,仅供学习,大神勿喷。

#coding: UTF-8'''ty 参数用于按序判断参数类型是否正确,argv参数用于判断具体某一参数类型是否正确example:ParamCheck(int,int,x=str)'''def ParamCheck(*ty,**argv):        ty=map(ToCheckFun,ty)    argv=dict((i,ToCheckFun(argv[i])) for i in argv)    def common(fun):        def deal(*fun_x,**fun_y):            if ty:                x_list=[a for a in fun_x]                x_list_it=iter(x_list)                result=[]                for t_check in ty:                    r=t_check(x_list_it.next())                    result.append(r)                                    print 'param check result: ',result                            if argv:                y_dic=dict((i,fun_y[i]) for i in fun_y)                result={}                for k in argv.keys():                    f=argv[k](y_dic.get(k))                    result[k]=f                print 'param check result: ',result                                return fun(*fun_x,**fun_y)                return deal                    return common#用于生成判断具体参数的函数def ToCheckFun(t):    return lambda x:isinstance(x,t)@ParamCheck(int,str,c=int)def fun_1(a,b,c):    passdef unit_test():    fun_1(1,2,c='ss')if __name__=='__main__':    unit_test()


关于装饰器的讲解,请参加一位大神的博客,这里就不再描述了。

http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

0 0
原创粉丝点击