Python 如果没有解包,如何以最通用的形式键入提示args和kwargs?

Python 如果没有解包,如何以最通用的形式键入提示args和kwargs?,python,typing,python-typing,iterable-unpacking,Python,Typing,Python Typing,Iterable Unpacking,假设我想将args和kwargs传递给函数,而不使用*args和**kwargs 在这种情况下,最常用的类型提示是什么 args的Iterable和kwargs的Mapping 示例代码 下面是一些使用Python3.8编写的示例代码 通过键入导入映射,Iterable def foo(*args,**kwargs)->无: 通过 def foo_dispatcher(foo_args:Iterable,foo_kwargs:Mapping)->None: foo(*foo_args,**fo

假设我想将
args
kwargs
传递给函数,而不使用
*args
**kwargs

在这种情况下,最常用的类型提示是什么

args的
Iterable
kwargs的
Mapping


示例代码

下面是一些使用Python3.8编写的示例代码

通过键入导入映射,Iterable
def foo(*args,**kwargs)->无:
通过
def foo_dispatcher(foo_args:Iterable,foo_kwargs:Mapping)->None:
foo(*foo_args,**foo_kwargs)
foo_调度程序([0],{“ham”:1})

如果您知道您的实际参数和Kwarg,那么您显然可以使用具体信息,包括参数的
TypedDict

在这种最常见的情况下,您可以使用
Iterable
映射[str,object]


由于命名的非关键字、可变长度的位置参数等原因,对于已知函数,这里很可能会出现过度键入的情况。您可能不想禁止将
def foo(a,b,c=4)
称为
foo(1,b=1,c=2)

记住键入提示是注释;代码必须在没有它们的情况下运行。在这种情况下,它不是真正的“args”和“kwargs”,您只是传递了一个列表和一个dict。我认为您选择的符号是正确的,如果混淆的话。