-
-
Notifications
You must be signed in to change notification settings - Fork 911
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
Unclear why iter_items should be favored over list_items #1775
Comments
Thanks for bringing this up! Solely on the basis of 'knowing myself a little' I'd think that the continuation would be a general listing of advantages of iterators. If |
- Fill in the missing part of the explanation of why to favor iter_items over list_items in IterableObj and Iterable (gitpython-developers#1775). - Move the explanation of how subclasses must treat arguments from the list_items methods to the iter_items methods, because the iter_items methdos are the ones that are abstract and must be overridden by a well-behaved subclass, and also because, since the iter_items methods are preferred for use, they should be the place where less duplicated shared documentation resides. - Subtantially reword the existing documentation for clarity, especially regarding the signifance of extra args and kwargs. - Put the iter_items method before (i.e. above) the list_items method (in each of the IterableObj and Iterable classes), because that method is the one that should be used more often, and because it is also now the one with the more detailed docstring. - Remove and old comment on a return type that said exactly the exact same thing as the annotation. - In Iterable, note deprecation more consistently (and thus in more places). - Rewrite the IterableClassWatcher class docstring to explain exactly what that metaclass achieves.
- Fill in the missing part of the explanation of why to favor iter_items over list_items in IterableObj and Iterable (gitpython-developers#1775). - Move the explanation of how subclasses must treat arguments from the list_items methods to the iter_items methods, because the iter_items methdos are the ones that are abstract and must be overridden by a well-behaved subclass, and also because, since the iter_items methods are preferred for use, they should be the place where less duplicated shared documentation resides. - Subtantially reword the existing documentation for clarity, especially regarding the signifance of extra args and kwargs. - Put the iter_items method before (i.e. above) the list_items method (in each of the IterableObj and Iterable classes), because that method is the one that should be used more often, and because it is also now the one with the more detailed docstring. - Remove and old comment on a return type that said exactly the exact same thing as the annotation. - In Iterable, note deprecation more consistently (and thus in more places). - Rewrite the IterableClassWatcher class docstring to explain exactly what that metaclass achieves.
I would say it is implemented as an iterator. The more detailed picture is:
I've opened #1780 to propose some |
In
git.util.IterableObj
, thelist_items
method recommends thatiter_items
be used instead, and begins to explain why, but it appears the actual explanation was never written:GitPython/git/util.py
Lines 1255 to 1256 in 4023f28
The deprecated
git.util.Iterable
class has the same note in itslist_items
docstring:GitPython/git/util.py
Lines 1218 to 1219 in 4023f28
In both cases, the subsequent non-blank line in the docstring documents what the
list_items
method itself returns, so the continuation truly is missing. The intended continuation does not seem to me to be something that can be inferred from the docstring as a whole. For example, here's the wholeIterableObj.list_items
docstring:GitPython/git/util.py
Lines 1250 to 1258 in 4023f28
It may seem odd that, unlike #1712, I did not notice this when working on #1725. But I think the reason is not that the docstrings had made sense to me at that time, but instead that I had noticed the more minor (really, almost trivial) issue that perhaps the first paragraph should be split so that only its first sentence would be its summary line, decided to return to it later to consider that further, and then forgot about it.
The text "Favor the iter_items method as it will" appears to have been present, and its continuation absent, for as long as the surrounding code has been in GitPython. It was introduced in f4fa1cb along with the
Iterable
class itself.In general, it may sometimes be preferable to obtain an iterator rather than a list or other sequence because it may not be necessary to materialize a collection just to iterate over it, and because unnecessary materialization can sometimes increase space usage. On the other hand, materialization guards against mutation of the original collection during iteration. But these are completely general ideas, not informed by the
list_items
docstrings nor even by any consideration specific to GitPython.My guess is that the docstring intended to say something more specific, or at least to identify which general benefit of
iter_items
serves to recommend it. So I don't think I could propose a specific improvement to that documentation without insight into what was originally intended.The text was updated successfully, but these errors were encountered: