用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。