为可调用类型提示指定* args

时间:2019-11-15 19:22:39

标签: python type-hinting typing

指定Callable变量fn*my_args作为参数的最佳方法是什么?像这样:

def test(fn: Callable([Tuple[any]], None),
         *my_args: any) -> None:
    fn(*myargs)

2 个答案:

答案 0 :(得分:2)

摘自typing.Callable上的文档:

  

没有语法指示可选或关键字参数;这种函数类型很少用作回调类型。 Callable[..., ReturnType](大写省略号)可用于使用任何数量的参数并返回ReturnType来键入提示可调用的提示。

因此,在*args是可选且ReturnTypeNone的情况下,请使用

fn: Callable[..., None]

P.s。我不使用类型提示,因此如果我误解了任何内容,请告诉我。

答案 1 :(得分:1)

现在使用 Python 3.10 中的 PEP 612,您可以这样写:

from typing import Callable, ParamSpec

P = ParamSpec("P")


def test(fn: Callable[P, None], *my_args: P.args, **my_kwargs: P.kwargs) -> None:
    fn(*myargs, **my_kwargs)

然后对 test 的任何调用都将进行正确的类型检查。