Skip to content

gh-135282: change documented signature of itertools.accumulate() #135283

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

skirpichev
Copy link
Contributor

@skirpichev skirpichev commented Jun 9, 2025

Now it's in sync with docstring/inspect output.
@skirpichev
Copy link
Contributor Author

@rhettinger, I know you usually against changes in docs, that introduce "advanced" function signatures (despite PDEB decision), but I think this change worth it.

  1. This function has single signature, supported by inspect/help().
  2. Old signature syntax is not explained anywhere in docs.
  3. It also has '*' symbol to guess it's meaning, but in the new version it has tooltip to provide some hints about.

Before:
Screenshot from 2025-06-09 10-47-37
After:
Screenshot from 2025-06-09 10-48-05

BTW, most examples in the module (except for islice/repeat) use AC and could be easily converted to use signatures as in the sphinx docs (i.e., no slashes).

@AA-Turner AA-Turner changed the title gh-135282: correct itertools.accumulate() signature in sphinx docs gh-135282: change documented signature of itertools.accumulate() Jun 9, 2025
@@ -93,12 +93,12 @@ streams of infinite length, so they should only be accessed by functions or
loops that truncate the stream.


.. function:: accumulate(iterable[, function, *, initial=None])
.. function:: accumulate(iterable, func=None, *, initial=None)
Copy link
Member

@AA-Turner AA-Turner Jun 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a better alternative, if we decide to change anything. None is misleading: the prose notes that the function defaults to addition. This is a good example of the function de facto having multiple signatures. The simple case is summation, the intermediate case is summation from an initial condition, and the advanced case is a custom accumulator.

The linked issue is a user using keyword-arguments for both iterable and func, which should probably be discouraged. I personally find it clearer to have 'function' throughout in the prose documentation, and I wonder if func is less clear to non-native speakers of English.

Suggested change
.. function:: accumulate(iterable, func=None, *, initial=None)
.. function:: accumulate(iterable)
accumulate(iterable, *, initial)
accumulate(iterable, func, *, initial=None)

Arguably, it should note that initial is only used if not None, too, but this is somewhat obvious from context.

A second, simpler suggestion would be as follows:

Suggested change
.. function:: accumulate(iterable, func=None, *, initial=None)
.. function:: accumulate(iterable, *, initial=None)
accumulate(iterable, func, *, initial=None)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
awaiting review docs Documentation in the Doc dir needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes skip news
Projects
Status: Todo
Development

Successfully merging this pull request may close these issues.

2 participants