Python 类型提示 Callable with one known positional type 然后是 *args 和 **kwargs

标签 python type-hinting typing mypy

我下面的函数foo,它有:

  • 一个已知类型的位置参数
  • 之后是可变数量的位置和关键字参数
from typing import Callable

def foo(bar: str, *args, **kwargs) -> None:
    """Some function with one positional arg and then *args and **kwargs."""

foo_: Callable[[str, ...], None] = foo  # error: Unexpected '...'

我如何输入提示?

目前,mypy==0.812 抛出错误:error: Unexpected '...' [misc]

最佳答案

您现在不能像 Samwise 的评论所说的那样执行此操作,但在 Python 3.10(在 PEP 612: Parameter Specification Variables 下)中,您将能够执行此操作:

from typing import Callable, ParamSpec, Concatenate

P = ParamSpec("P")

def receive_foo(foo: Callable[Concatenate[str, P], None]):
    pass

我不确定您是否能够申报 TypeAlias但是对于它(因为 P 不能在全局范围内使用),所以你可能必须每次都用 P 指定内联类型。

关于Python 类型提示 Callable with one known positional type 然后是 *args 和 **kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66961423/

相关文章:

python - 区分类型别名和实际类的约定?

php - 是否可以在 PHP 7 上指定多种返回类型?

typescript - 有没有办法将 "extract"类型的 TypeScript 接口(interface)属性?

python - 禁止使用 python 类型将枚举条目作为函数参数的值

C++ 模板参数和偏特化 : strong or weak typing?

javascript - redisClient.on ('message' 触发多个事件)

python - 如何使用 python sdk 在 okta 中创建具有凭据的用户

python - 一个函数的类型提示包装另一个函数,接受相同的参数

python - 将 report_tensor_allocations_upon_oom 添加到 cifar10_estimator 示例

python - 如何将颠倒的元音大写?