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

学习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):
    pass

def unit_test():
    fun_1(1,2,c='ss')

if __name__=='__main__':
    unit_test()


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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值