展开全部
#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]): #判断类e69da5e887aa62616964757a686964616f31333239303265型
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)
已赞过
已踩过<
你对这个回答的评价是?
评论
收起