GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-145300: Add `__length_hint__` for `itertools.islice` by KowalskiThomas · Pull Request #145333 · python/cpython

Conversation

@KowalskiThomas

@KowalskiThomas KowalskiThomas commented Feb 27, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Summary

This PR addresses an issue I spotted on #145300, which mentioned that itertools.islice does not support __length_hint__ currently.

General philosophy is

  • Early return 0 in all cases that make sense
  • If stop is not set, we don't know the number of elements we will iterate over, so we use the underlying iterator's __length_hint__ then do our calculations over that
  • Once we have a start, a stop and a step, or a start a length hint and a step, we can know how many iterations that will result in.

Testing wise, I added a few unit tests but it's unclear to me if I should be adding more (there doesn't seem to be a ton of instances/examples for the other itertools tests), but feel free to request more. Just to gain confidence in the change myself, I also tried the following locally (it works):

import itertools

for start in range(0, 100):
    for stop in range(0, 100):
        for step in range(1, 100):
            r = range(100)
            s = itertools.islice(r, start, stop, step)
            hint = s.__length_hint__()
            l = list(s)

            assert len(l) == hint

Note this is my first PR here; I read the contributor guidelines but I apologise in advance if anything I did not follow them (please do tell me!)

  • Issue: Inconsistent .extend() behavior in bytearray #145300

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@python-cla-bot

python-cla-bot Bot commented Feb 27, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

All commit authors signed the Contributor License Agreement.

CLA signed

KowalskiThomas reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot mentioned this pull request Feb 27, 2026
Inconsistent .extend() behavior in bytearray #145300
Open
@bedevere-app

bedevere-app Bot commented Feb 27, 2026

Copy link
Copy Markdown

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

KowalskiThomas reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@KowalskiThomas
KowalskiThomas force-pushed the kowalski/gh-145300-add-__length_hint__-for-itertools-islice branch from 59ebd06 to 5f94bd0 Compare February 28, 2026 08:24
@KowalskiThomas
pythongh-145300: Add __length_hint__ for itertools.islice
82c68c8
@KowalskiThomas
KowalskiThomas force-pushed the kowalski/gh-145300-add-__length_hint__-for-itertools-islice branch from 5f94bd0 to 82c68c8 Compare February 28, 2026 08:32
@KowalskiThomas KowalskiThomas changed the title gh-145300: Add __length_hint__ for itertools.islice gh-145300: Add __length_hint__ for itertools.islice Feb 28, 2026
@KowalskiThomas
KowalskiThomas marked this pull request as ready for review February 28, 2026 09:33
@KowalskiThomas
KowalskiThomas requested a review from rhettinger as a code owner February 28, 2026 09:33
@bedevere-app bedevere-app Bot added the awaiting review label Feb 28, 2026
chatgpt-codex-connector[bot]
chatgpt-codex-connector Bot reviewed Feb 28, 2026
View reviewed changes

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 82c68c8fe5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread Modules/itertoolsmodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Modules/itertoolsmodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Modules/itertoolsmodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

KowalskiThomas added 3 commits February 28, 2026 10:53
@KowalskiThomas
fix: handle exhausted iterators
e14996a
@KowalskiThomas
fix: take count into account when using underlying hint
9f1b3a6
@KowalskiThomas
fix: avoid overflow
cb3866f
@KowalskiThomas

KowalskiThomas commented Feb 28, 2026

Copy link
Copy Markdown
Contributor Author

So it seems the Codex bot which we use at work is configured to review my PRs on all repositories, including the ones that do not belong to my organisation... I've disabled it for the time being as I don't know what the policy around it is in CPython (sorry about that).

hugovk and cmaloney reacted with thumbs up emoji
All reactions
  • 👍 2 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@KowalskiThomas

KowalskiThomas commented Feb 28, 2026

Copy link
Copy Markdown
Contributor Author

After checking, I think there are other helpers from itertools that would benefit from having __length_hint__ added to them, but I'll make a separate issue+PR for that.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@KowalskiThomas KowalskiThomas mentioned this pull request Feb 28, 2026
Add __length_hint__ methods to itertools helpers #145361
Closed
@cmaloney

cmaloney commented Mar 1, 2026

Copy link
Copy Markdown
Contributor

re: Generative AI see https://devguide.python.org/getting-started/generative-ai/.

For PR review I'm holding off for more discussion on gh-145361. The code in this PR looks reasonable; when __length_hint__ is worthwhile to add and if the maintainer of the module wants to have them are outstanding questions to me.

KowalskiThomas reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@rhettinger rhettinger self-assigned this Mar 2, 2026
@rhettinger rhettinger closed this Mar 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@chatgpt-codex-connector chatgpt-codex-connector[bot] chatgpt-codex-connector[bot] left review comments
@rhettinger rhettinger Awaiting requested review from rhettinger rhettinger is a code owner

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@rhettinger rhettinger

Labels

awaiting review

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@KowalskiThomas @cmaloney @rhettinger
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.