如何将kwargs从装饰器传递到装饰器?

问题描述

我被要求建造两个装饰器: 其中之一是读取目录及其子目录中的所有文件,并返回与其作为参数获取的模式匹配的文件名。 它将它们作为包装函数的“文件”参数返回。

第二个获取文件列表并返回dict,其中键是文件名,值是文件内容

我一直被要求做到这里。

问题的下一部分是将文件从第一个生成器传递到第二个生成器,并将第二个参数设置为可选-我的意思是,如果第二个用第一个生成器修饰,则不应在第一个生成器中获取任何参数第二个装饰器,并从第一个装饰器获取文件列表。 我在这里卡住了。

就是装饰器:

一个

from pathlib import Path
import fnmatch
import os
import glob


def find(*args):
    def inner(f):
        files = []

        def wrapper(*wrapper_args,**kwargs):
            p = Path("./")
            for folder in p.glob("**"):
                for file in os.listdir(folder):
                    for arg in args:
                        if fnmatch.fnmatch(file,arg):
                            files.append(file)
            return f(files=files,*wrapper_args,**kwargs)

        return wrapper()

    return inner


@find("*.py","*.txt")
def file_printer(files):
    print(files) 

第二个:

def read_file(path):
    with open(path,"r") as f:
        f = f.read()
        return f


def use(**use_kwargs):
    def inner(f):
        content = {}

        def wrapper(*wrapper_args,**kwargs):
            p = Path("./")
            for folder in p.glob("**"):
                for file in use_kwargs.get("files"):
                    if file in os.listdir(folder):
                        file_path = f"{folder}/{file}"
                        content[file_path] = read_file(file_path)

            return f(content=content,**kwargs)

        return wrapper()

    return inner


@use(files=["cat.py","dog.py"])
def file_printer(content):
    print(content) 

在这种情况下也应该起作用,并将“文件”参数从第一个传递到第二个。在这里我需要您的帮助。

@find("*.py","*.txt")
@use
def file_printer(content):
    print(content)
 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)