mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	gh-103629: Update typing.Unpack docs in compliance with PEP 692 (#103894)
This commit is contained in:
		
							parent
							
								
									a3a5b4bb23
								
							
						
					
					
						commit
						dc3f97549a
					
				
					 3 changed files with 58 additions and 2 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue