#Python 2.5
#這個可以用修飾器來完成
#但是一般不會限制引數型別
#給你個思路:
def argfilter(*types):
def deco(func): #這是修飾器
def newfunc(*args): #新的函式
if len(types)==len(args):
correct = True
for i in range(len(args)):
if not isinstance(args[i], types[i]): #判斷型別
correct = False
if correct:
return func(*args) #返回原函式值
else:
raise TypeError
return newfunc #由修飾器返回新的函式
return deco #返回作為修飾器的函式
@argfilter(int, str) #指定引數型別
def func(i, s): #定義被修飾的函式
print i, s
#之後你想限制類型的話, 就這樣:
#@argfilter(第一個引數的類名, 第二個引數的類名, ..., 第N個引數的類名)
#def yourfunc(第一個引數, 第一個引數, ..., 第N個引數):
# ...
#
#相當於:
#yourfunc = argfilter(第一個引數的類名, 第二個引數的類名, ..., 第N個引數的類名)(yourfunc)
#Python 2.5
#這個可以用修飾器來完成
#但是一般不會限制引數型別
#給你個思路:
def argfilter(*types):
def deco(func): #這是修飾器
def newfunc(*args): #新的函式
if len(types)==len(args):
correct = True
for i in range(len(args)):
if not isinstance(args[i], types[i]): #判斷型別
correct = False
if correct:
return func(*args) #返回原函式值
else:
raise TypeError
else:
raise TypeError
return newfunc #由修飾器返回新的函式
return deco #返回作為修飾器的函式
@argfilter(int, str) #指定引數型別
def func(i, s): #定義被修飾的函式
print i, s
#之後你想限制類型的話, 就這樣:
#@argfilter(第一個引數的類名, 第二個引數的類名, ..., 第N個引數的類名)
#def yourfunc(第一個引數, 第一個引數, ..., 第N個引數):
# ...
#
#相當於:
#def yourfunc(第一個引數, 第一個引數, ..., 第N個引數):
# ...
#yourfunc = argfilter(第一個引數的類名, 第二個引數的類名, ..., 第N個引數的類名)(yourfunc)