Skip to content

Commit

Permalink
pythongh-119127: functools: Improve docs for partial and Placeholder
Browse files Browse the repository at this point in the history
Edits for improving the clarity and writing of the docs for partial.
  • Loading branch information
JelleZijlstra committed Sep 26, 2024
1 parent d929652 commit 2f678e3
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions Doc/library/functools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ The :mod:`functools` module defines the following functions:
newfunc.keywords = keywords
return newfunc

The :func:`partial` function is used for partial function application which "freezes"
The :func:`!partial` function is used for partial function application which "freezes"
some portion of a function's arguments and/or keywords resulting in a new object
with a simplified signature. For example, :func:`partial` can be used to create
a callable that behaves like the :func:`int` function where the *base* argument
Expand All @@ -368,25 +368,27 @@ The :mod:`functools` module defines the following functions:
18

If :data:`Placeholder` sentinels are present in *args*, they will be filled first
when :func:`partial` is called. This allows custom selection of positional arguments
to be pre-filled when constructing a :ref:`partial object <partial-objects>`.
when :func:`!partial` is called. This makes it possible to pre-fill any positional
argument with a call to :func:`!partial`; without :data:`!Placeholder`, only the
first positional argument can be pre-filled.

If :data:`!Placeholder` sentinels are present, all of them must be filled at call time:
If any :data:`!Placeholder` sentinels are present, all must be filled at call time:

.. doctest::

>>> say_to_world = partial(print, Placeholder, Placeholder, "world!")
>>> say_to_world('Hello', 'dear')
Hello dear world!

Calling ``say_to_world('Hello')`` would raise a :exc:`TypeError`, because
only one positional argument is provided, while there are two placeholders
in :ref:`partial object <partial-objects>`.
Calling ``say_to_world('Hello')`` raises a :exc:`TypeError`, because
only one positional argument is provided, but there are two placeholders
that must be filled in.

Successive :func:`partial` applications fill :data:`!Placeholder` sentinels
of the input :func:`partial` objects with new positional arguments.
A place for positional argument can be retained by inserting new
:data:`!Placeholder` sentinel to the place held by previous :data:`!Placeholder`:
If :func:`!partial` is applied to an existing :func:`!partial` object,
:data:`!Placeholder` sentinels of the input object are filled in with
new positional arguments.
A placeholder can be retained by inserting a new
:data:`!Placeholder` sentinel to the place held by a previous :data:`!Placeholder`:

.. doctest::

Expand All @@ -402,8 +404,8 @@ The :mod:`functools` module defines the following functions:
>>> remove_first_dear(message)
'Hello, dear world!'

Note, :data:`!Placeholder` has no special treatment when used for keyword
argument of :data:`!Placeholder`.
:data:`!Placeholder` has no special treatment when used in a keyword
argument to :func:`!partial`.

.. versionchanged:: 3.14
Added support for :data:`Placeholder` in positional arguments.
Expand Down

0 comments on commit 2f678e3

Please sign in to comment.