mirror of https://github.com/python/cpython
gh-103629: Update typing.Unpack docs in compliance with PEP 692 (#103894)
This commit is contained in:
parent
a3a5b4bb23
commit
dc3f97549a
|
@ -98,6 +98,9 @@ annotations. These include:
|
||||||
*Introducing* :data:`LiteralString`
|
*Introducing* :data:`LiteralString`
|
||||||
* :pep:`681`: Data Class Transforms
|
* :pep:`681`: Data Class Transforms
|
||||||
*Introducing* the :func:`@dataclass_transform<dataclass_transform>` decorator
|
*Introducing* the :func:`@dataclass_transform<dataclass_transform>` decorator
|
||||||
|
* :pep:`692`: Using ``TypedDict`` for more precise ``**kwargs`` typing
|
||||||
|
*Introducing* a new way of typing ``**kwargs`` with :data:`Unpack` and
|
||||||
|
:data:`TypedDict`
|
||||||
* :pep:`698`: Adding an override decorator to typing
|
* :pep:`698`: Adding an override decorator to typing
|
||||||
*Introducing* the :func:`@override<override>` decorator
|
*Introducing* the :func:`@override<override>` decorator
|
||||||
|
|
||||||
|
@ -1417,8 +1420,10 @@ These are not used in annotations. They are building blocks for creating generic
|
||||||
tup: tuple[Unpack[Ts]]
|
tup: tuple[Unpack[Ts]]
|
||||||
|
|
||||||
In fact, ``Unpack`` can be used interchangeably with ``*`` in the context
|
In fact, ``Unpack`` can be used interchangeably with ``*`` in the context
|
||||||
of types. You might see ``Unpack`` being used explicitly in older versions
|
of :class:`typing.TypeVarTuple <TypeVarTuple>` and
|
||||||
of Python, where ``*`` couldn't be used in certain places::
|
:class:`builtins.tuple <tuple>` types. You might see ``Unpack`` being used
|
||||||
|
explicitly in older versions of Python, where ``*`` couldn't be used in
|
||||||
|
certain places::
|
||||||
|
|
||||||
# In older versions of Python, TypeVarTuple and Unpack
|
# In older versions of Python, TypeVarTuple and Unpack
|
||||||
# are located in the `typing_extensions` backports package.
|
# are located in the `typing_extensions` backports package.
|
||||||
|
@ -1428,6 +1433,21 @@ These are not used in annotations. They are building blocks for creating generic
|
||||||
tup: tuple[*Ts] # Syntax error on Python <= 3.10!
|
tup: tuple[*Ts] # Syntax error on Python <= 3.10!
|
||||||
tup: tuple[Unpack[Ts]] # Semantically equivalent, and backwards-compatible
|
tup: tuple[Unpack[Ts]] # Semantically equivalent, and backwards-compatible
|
||||||
|
|
||||||
|
``Unpack`` can also be used along with :class:`typing.TypedDict` for typing
|
||||||
|
``**kwargs`` in a function signature::
|
||||||
|
|
||||||
|
from typing import TypedDict, Unpack
|
||||||
|
|
||||||
|
class Movie(TypedDict):
|
||||||
|
name: str
|
||||||
|
year: int
|
||||||
|
|
||||||
|
# This function expects two keyword arguments - `name` of type `str`
|
||||||
|
# and `year` of type `int`.
|
||||||
|
def foo(**kwargs: Unpack[Movie]): ...
|
||||||
|
|
||||||
|
See :pep:`692` for more details on using ``Unpack`` for ``**kwargs`` typing.
|
||||||
|
|
||||||
.. versionadded:: 3.11
|
.. versionadded:: 3.11
|
||||||
|
|
||||||
.. class:: ParamSpec(name, *, bound=None, covariant=False, contravariant=False)
|
.. class:: ParamSpec(name, *, bound=None, covariant=False, contravariant=False)
|
||||||
|
|
|
@ -66,6 +66,10 @@ Summary -- Release highlights
|
||||||
|
|
||||||
.. PEP-sized items next.
|
.. PEP-sized items next.
|
||||||
|
|
||||||
|
New typing features:
|
||||||
|
|
||||||
|
* :ref:`whatsnew312-pep692`
|
||||||
|
|
||||||
Important deprecations, removals or restrictions:
|
Important deprecations, removals or restrictions:
|
||||||
|
|
||||||
* :pep:`623`, Remove wstr from Unicode
|
* :pep:`623`, Remove wstr from Unicode
|
||||||
|
@ -145,6 +149,36 @@ New Features
|
||||||
In Python 3.14, the default will switch to ``'data'``.
|
In Python 3.14, the default will switch to ``'data'``.
|
||||||
(Contributed by Petr Viktorin in :pep:`706`.)
|
(Contributed by Petr Viktorin in :pep:`706`.)
|
||||||
|
|
||||||
|
New Features Related to Type Hints
|
||||||
|
==================================
|
||||||
|
|
||||||
|
This section covers major changes affecting :pep:`484` type hints and
|
||||||
|
the :mod:`typing` module.
|
||||||
|
|
||||||
|
.. _whatsnew312-pep692:
|
||||||
|
|
||||||
|
PEP 692: Using ``TypedDict`` for more precise ``**kwargs`` typing
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
|
||||||
|
Typing ``**kwargs`` in a function signature as introduced by :pep:`484` allowed
|
||||||
|
for valid annotations only in cases where all of the ``**kwargs`` were of the
|
||||||
|
same type.
|
||||||
|
|
||||||
|
This PEP specifies a more precise way of typing ``**kwargs`` by relying on
|
||||||
|
typed dictionaries::
|
||||||
|
|
||||||
|
from typing import TypedDict, Unpack
|
||||||
|
|
||||||
|
class Movie(TypedDict):
|
||||||
|
name: str
|
||||||
|
year: int
|
||||||
|
|
||||||
|
def foo(**kwargs: Unpack[Movie]): ...
|
||||||
|
|
||||||
|
See :pep:`692` for more details.
|
||||||
|
|
||||||
|
(PEP written by Franek Magiera)
|
||||||
|
|
||||||
|
|
||||||
Other Language Changes
|
Other Language Changes
|
||||||
======================
|
======================
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Mention the new way of typing ``**kwargs`` with ``Unpack`` and ``TypedDict``
|
||||||
|
introduced in :pep:`692`.
|
Loading…
Reference in New Issue