繁体   English   中英

如何使用参数为 function 编写装饰器?

[英]How to write a decorator for a function with an argument?

我想编写一个装饰器来将主 function 的标准输出重定向到特定的日志文件。 主 function 采用的参数是 - 项,我希望装饰器为主 function 的每个项分配不同的日志路径。 我如何实现这一目标?

目前我有:

def redirect_stdout(func):
    def wrapper():
        with open(f"{log_path}{item}.log", "w") as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
            func(item)
    return wrapper()

@redirect_stdout
def main(item):

但我不确定 item 参数是如何进入装饰器的。 谢谢!

您正在寻找的内容如下所示

def redirect_stdout(func):
    def wrapper(item):
        with open(f"{log_path}{item}.log", "w") as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
            func(item)
    return wrapper

要了解它是如何工作的,您需要正确理解装饰器的工作原理。 检查下面我试图解释装饰器是如何工作的。 ==>我曾经表示这个是等价的。



@redirect_stdout
def main(item):
    pass

== >

def main(item):
    pass

main = redirect_stdout(main) = wrapper
---------
main(item) => wrapper(item)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM