如果不解包,如何以最一般的形式输入提示参数和 kwargs?
How to type hint args and kwargs, if not unpacking, in most general form?
假设我想使用 *args
和 **kwargs
将 args
和 kwargs
传递给函数 而没有 。
在活动中,最常用的类型提示是什么?
args
是Iterable
,kwargs
是Mapping
吗?
示例代码
这是使用 Python 3.8.
制作的一些示例代码
from typing import Mapping, Iterable
def foo(*args, **kwargs) -> None:
pass
def foo_dispatcher(foo_args: Iterable, foo_kwargs: Mapping) -> None:
foo(*foo_args, **foo_kwargs)
foo_dispatcher([0], {"ham": 1})
如果你知道你的实际参数和 kwargs 那么你显然可以使用细节,包括 TypedDict
作为参数。
在这种最常见的情况下,您可以使用 Iterable
和 Mapping[str, object]
。
由于命名的非关键字、可变长度位置参数等,对于已知函数,这里很可能会出现过度输入。您可能不想禁止 def foo(a, b, c=4)
被调用为 foo(1, b=1, c=2)
假设我想使用 *args
和 **kwargs
将 args
和 kwargs
传递给函数 而没有 。
在活动中,最常用的类型提示是什么?
args
是Iterable
,kwargs
是Mapping
吗?
示例代码
这是使用 Python 3.8.
制作的一些示例代码from typing import Mapping, Iterable
def foo(*args, **kwargs) -> None:
pass
def foo_dispatcher(foo_args: Iterable, foo_kwargs: Mapping) -> None:
foo(*foo_args, **foo_kwargs)
foo_dispatcher([0], {"ham": 1})
如果你知道你的实际参数和 kwargs 那么你显然可以使用细节,包括 TypedDict
作为参数。
在这种最常见的情况下,您可以使用 Iterable
和 Mapping[str, object]
。
由于命名的非关键字、可变长度位置参数等,对于已知函数,这里很可能会出现过度输入。您可能不想禁止 def foo(a, b, c=4)
被调用为 foo(1, b=1, c=2)