用法:
class typing.ParamSpec(name, *, bound=None, covariant=False, contravariant=False)
参数规范变量。
type variables
的专用版本。用法:
P = ParamSpec('P')
参数规范变量的存在主要是为了静态类型检查器的好处。它们用于将一个可调用对象的参数类型转发到另一个可调用对象——这种模式常见于高阶函数和装饰器中。它们仅在
Concatenate
中使用,或作为Callable
的第一个参数,或作为用户定义泛型的参数时才有效。有关泛型类型的更多信息,请参阅Generic
。例如,要向函数添加基本日志记录,可以创建一个装饰器
add_logging
来记录函数调用。参数说明变量告诉类型检查器传递给装饰器的可调用对象和它返回的新可调用对象具有inter-dependent 类型参数:from collections.abc import Callable from typing import TypeVar, ParamSpec import logging T = TypeVar('T') P = ParamSpec('P') def add_logging(f: Callable[P, T]) -> Callable[P, T]: '''A type-safe decorator to add logging to a function.''' def inner(*args: P.args, **kwargs: P.kwargs) -> T: logging.info(f'{f.__name__} was called') return f(*args, **kwargs) return inner @add_logging def add_two(x: float, y: float) -> float: '''Add two numbers together.''' return x + y
如果没有
ParamSpec
,之前注释它的最简单方法是使用带有绑定Callable[..., Any]
的TypeVar
。然而,这会导致两个问题:使用
covariant=True
或contravariant=True
创建的参数规范变量可用于声明协变或逆变泛型类型。bound
参数也被接受,类似于TypeVar
。然而,这些关键字的实际语义尚未确定。3.10 版中的新函数。
注意
只能 pickle 在全局范围内定义的参数规范变量。
相关用法
- Python typing.ParamSpecKwargs用法及代码示例
- Python typing.Protocol用法及代码示例
- Python typing.get_type_hints用法及代码示例
- Python typing.Concatenate用法及代码示例
- Python typing.Optional用法及代码示例
- Python typing.Final用法及代码示例
- Python typing.TypedDict.__optional_keys__用法及代码示例
- Python typing.NoReturn用法及代码示例
- Python typing.TypedDict.__total__用法及代码示例
- Python typing.is_typeddict用法及代码示例
- Python typing.TypeVar用法及代码示例
- Python typing.AsyncGenerator用法及代码示例
- Python typing.final用法及代码示例
- Python typing.ClassVar用法及代码示例
- Python typing.Literal用法及代码示例
- Python typing.overload用法及代码示例
- Python typing.TYPE_CHECKING用法及代码示例
- Python typing.TypedDict用法及代码示例
- Python typing.List用法及代码示例
- Python typing.Generic用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 typing.ParamSpec。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。