def lowercasewrapper(func):
def wrapper(*args, **kwargs):
return [item.lower() for item in func(*args, **kwargs)]
return wrapper
我了解decorator是做什么的,我已经将上面的decorator实现到我的代码中,并且它可以工作,但是我对一些事情有点不确定。你知道吗
为什么不能用(*args,**kwargs)替换(func)并在此过程中删除def包装行?我猜前两行做的不一样,但对我来说就是这样。好像是:
def lowercasewrapper(accept function)
def wrapper(accept function)
“func”这个词在这里有什么意义?我注意到我可以用任何东西替换这个词,我的代码仍然有效。我放在@lowercasewrapper下面的函数是否直接输入到decorator中,而不管“()”中的内容是什么?
另外,有点离题,但这个词的项目也没有意义,对吧?我也可以用任何一个词来代替它,它仍然有效。
如果有人能提供帮助,详细解释和回答,而不是把我引向“什么是装饰师”的话题,我将不胜感激。你知道吗
简而言之,装饰师实际上是这样做的:
对此:
因此,需要内部函数的原因是decorator必须返回一个函数,否则上述操作毫无意义。记住这一点:
第1点:注意最后一行返回
wrapper
,就像函数wrapper
本身一样。这就是为什么不能删除该部分;函数实际上是在构建一个经过修改的函数来返回。你知道吗第2点和第3点:你说得对,它只是一个任意变量名,在这个函数之外没有任何意义。你知道吗
所以!考虑到这一点,以下是装饰师的情况:
lowercasewrapper(f)
被调用(其中f
显然被假定为返回字符串的iterable)lowercasewrapper
定义另一个函数,该函数接受一些任意参数,然后对这些参数调用f,然后返回结果,但将项转换为小写lowercasewrapper
然后返回修改后的函数这里最大的障碍可能是返回函数的想法,而不是返回调用函数的结果。如果这对你来说毫无意义,请阅读关于一流函数的文章(或参阅Leon Young的链接)。你知道吗
相关问题 更多 >
编程相关推荐