天天看點

python函數的參數可以接收哪些類型的資料_python通過裝飾器檢查函數參數資料類型的方法...

本文執行個體講述了python通過裝飾器檢查函數參數資料類型的方法。分享給大家供大家參考。具體分析如下:

這段代碼定義了一個python裝飾器,通過此裝飾器可以用來檢查指定函數的參數是否是指定的類型,在定義函數時加入此裝飾器可以非常清晰的檢測函數參數的類型,非常友善

def accepts(exception,**types):

def check_accepts(f):

assert len(types) == f.func_code.co_argcount, \

'accept number of arguments not equal with function number of arguments in "%s"' % f.func_name

def new_f(*args, **kwds):

for i,v in enumerate(args):

if types.has_key(f.func_code.co_varnames[i]) and \

not isinstance(v, types[f.func_code.co_varnames[i]]):

raise exception("arg '%s'=%r does not match %s" % \

(f.func_code.co_varnames[i],v,types[f.func_code.co_varnames[i]]))

del types[f.func_code.co_varnames[i]]

for k,v in kwds.iteritems():

if types.has_key(k) and not isinstance(v, types[k]):

raise exception("arg '%s'=%r does not match %s" % \

(k,v,types[k]))

return f(*args, **kwds)

new_f.func_name = f.func_name

return new_f

return check_accepts

def exmaple():

@accepts(Exception,a=int,b=list,c=(str,unicode))

def test(a,b=None,c=None)

print 'ok'

test(13,c=[],b='df')

希望本文所述對大家的Python程式設計有所幫助。