如何使用函数装饰器检查函数类型?
How to use function decorators to check type of function?
如何使用函数装饰器来检查另一个函数的参数?我正在努力思考函数装饰器,但它非常令人困惑。
理想情况下,我希望它像这样工作,你在下面传入一个 int 和一个函数,该函数可以工作,否则你会得到一个类型错误。
@check(int)
def printer(arg):
print(arg)
>>> printer(5)
5
这是我试过的方法,但它不起作用。
def check(typ):
def validate(args):
if type(args) == typ:
return validate(args)
else:
raise TypeError
return validate
任何建议或指导将不胜感激,我真的很想了解装饰器。
check(int)
还需要 return 一个函数。
def check(typ):
def checker(f):
def checked_func(arg):
if isinstance(arg, typ):
return f(arg)
else:
raise TypeError
return checked_func
return checker
现在,_
是由 check
编辑的实际装饰器 return,_
将原始函数包装在 另一个 函数检查参数的类型,return 是应用于参数的原始函数的结果,或者引发 TypeError。
如果我们把它分成更多的部分,可能会更容易理解。
int_checker = check(int)
@int_checker
def printer(arg):
print(arg)
在 python 中一切都是对象,甚至函数也是。
让我以不同的方式编写函数只是为了表达
def fun(arg):
可以表示为
fun(a variable) = function(arg) # just like we write in JS
因此我们也可以为变量分配不同的值。同样,我们可以为给定的函数名称分配不同的函数。
简而言之,装饰器的意思是将不同的函数分配给它所覆盖的函数名称
@deco
def func(arg):
与
相同
func = deco(func)
为此,装饰器的 return 类型应该是指向另一个函数的指针。
所以装饰器语法就像 -
def deco_func(func): # the parameter is a function
def wrap_func(args): #the args are the argument of original function
#what ever you want to do
return func(args) #call for original function
retunr wrap_func # returning of the pointer of the wrap function.
如何使用函数装饰器来检查另一个函数的参数?我正在努力思考函数装饰器,但它非常令人困惑。
理想情况下,我希望它像这样工作,你在下面传入一个 int 和一个函数,该函数可以工作,否则你会得到一个类型错误。
@check(int)
def printer(arg):
print(arg)
>>> printer(5)
5
这是我试过的方法,但它不起作用。
def check(typ):
def validate(args):
if type(args) == typ:
return validate(args)
else:
raise TypeError
return validate
任何建议或指导将不胜感激,我真的很想了解装饰器。
check(int)
还需要 return 一个函数。
def check(typ):
def checker(f):
def checked_func(arg):
if isinstance(arg, typ):
return f(arg)
else:
raise TypeError
return checked_func
return checker
现在,_
是由 check
编辑的实际装饰器 return,_
将原始函数包装在 另一个 函数检查参数的类型,return 是应用于参数的原始函数的结果,或者引发 TypeError。
如果我们把它分成更多的部分,可能会更容易理解。
int_checker = check(int)
@int_checker
def printer(arg):
print(arg)
在 python 中一切都是对象,甚至函数也是。 让我以不同的方式编写函数只是为了表达
def fun(arg):
可以表示为
fun(a variable) = function(arg) # just like we write in JS
因此我们也可以为变量分配不同的值。同样,我们可以为给定的函数名称分配不同的函数。
简而言之,装饰器的意思是将不同的函数分配给它所覆盖的函数名称
@deco
def func(arg):
与
相同 func = deco(func)
为此,装饰器的 return 类型应该是指向另一个函数的指针。
所以装饰器语法就像 -
def deco_func(func): # the parameter is a function
def wrap_func(args): #the args are the argument of original function
#what ever you want to do
return func(args) #call for original function
retunr wrap_func # returning of the pointer of the wrap function.