如何使用任意参数列表vararg键入提示可调用

问题描述

我正在尝试键入一个看起来像这样的函数

def delete_file_if_exists():
    """Fixture providing a function that deletes a list of files of given filename it it exists
    """
    def deletion_function(*args: AnyPath) -> None:
        """A function deleting the file of given path if it exists
        :param args:The list of path to delete if file exists
        """
        for arg in args:
            if os.path.isfile(arg):
                os.remove(arg)
    return deletion_function

我想知道如何准确输入:

1.

def delete_file_if_exists() -> Callable[...,None]:

有效但不指定变量参数的类型

2.

def delete_file_if_exists() -> Callable[[List[AnyPath]],None]:

不起作用,但在其上运行 mypy 会出现以下异常: Incompatible return value type (got "Callable[[Vararg(Union[str,bytes,_PathLike[str],_PathLike[bytes]])],None]",expected "Callable[[List[Union[str,_PathLike[bytes]]]],None]")

所以我想知道我是否可以用这个 Vararg(我无法导入)做些什么,或者我是否被一个省略号打字卡住了。

解决方法

您可以使用 mypy-extension 导入类型 VarArg。