You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python包装器函数中对**kwargs进行类型注解?

如何实现类型安全的关键字参数传递包装器(无需TypedDict)

你的写法问题出在泛型参数的声明方式上,**T_kwargs 这种语法是不合法的,Pyright 报错正是因为这个原因。不需要用 TypedDict,用 ParamSpec 就能实现类型安全的关键字参数传递。

正确的实现方式如下:

from typing import Callable, ParamSpec, TypeVar

# 定义参数规格和返回值类型变量
P = ParamSpec('P')
R = TypeVar('R')

def wrapper(fn: Callable[P, R], **kwargs: P.kwargs) -> R:
    return fn(**kwargs)

关键说明:

  • ParamSpec('P') 用于捕获被包装函数的完整参数类型信息(包括位置参数和关键字参数)
  • P.kwargs 提取出被包装函数的关键字参数类型,让包装器的 **kwargs 与原函数的关键字参数类型严格匹配
  • TypeVar('R') 捕获被包装函数的返回值类型,保证包装器返回值类型与原函数一致

使用示例:

def calculate_area(length: float, width: float) -> float:
    return length * width

# 类型检查通过
wrapper(calculate_area, length=3.5, width=2.0)

# 类型检查会报错(传入了错误类型的参数)
wrapper(calculate_area, length='3.5', width=2.0)

这样实现的包装器既能正确传递关键字参数,又能保持类型安全,完全不需要依赖 TypedDict。

内容的提问来源于stack exchange,提问作者user16776498

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:32:41