-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
bpo-30969: Fix docs about the comparison in absence of __contains__ #2761
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
Conversation
Both the `__iter__` and the index-iteration method test the `is` first. While the document says that `x is x` means that `x == x` should be true, it is not true for example in the case of `nan`. ```>>> x = float('nan') >>> x == x False >>> x is x True >>> class Foo: ... def __iter__(self): ... return iter([x]) ... >>> x in Foo() True >>> any(x == i for i in Foo()) False >>> class Bar: ... def __getitem__(self): ... return [x].__getitem__(self) ... >>> class Bar: ... def __getitem__(self, i): ... return [x].__getitem__(i) ... >>> x in Bar Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'type' is not iterable >>> x in Bar() True >>> any(x == i for i in Bar()) False```
@ztane, thanks for your PR! By analyzing the history of the files in this pull request, we identified @birkenfeld, @vadmium and @benjaminp to be potential reviewers. |
Doc/reference/expressions.rst
Outdated
:meth:`__iter__`, ``x in y`` is ``True`` if some value ``z`` with ``x == z`` is | ||
produced while iterating over ``y``. If an exception is raised during the | ||
iteration, it is as if :keyword:`in` raised that exception. | ||
:meth:`__iter__`, ``x in y`` is ``True`` if some value ``z``, for which the |
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.
@ztane trailing space in the three lines are causing CI failure. Removing them will fix the issue. Thanks for the patch.
Doc git:(pr_2761) python3 tools/rstlint.py -i tools -i ./venv -i README.rst
[1] reference/expressions.rst:1446: trailing whitespace
[1] reference/expressions.rst:1447: trailing whitespace
[1] reference/expressions.rst:1448: trailing whitespace
3 problems with severity 1 found.
@ztane, please apply the suggestions from @tirkarthi to fix the CI failures. Thanks! |
…ythonGH-2761) (cherry picked from commit 2f5b9dc) Co-authored-by: Antti Haapala <[email protected]>
GH-13684 is a backport of this pull request to the 3.7 branch. |
…H-2761) (cherry picked from commit 2f5b9dc) Co-authored-by: Antti Haapala <[email protected]>
The documentation doesn't match the implementation, which clearly does
x is y or x == y
to check ifx
is the elementy
from a container. Both the__iter__
and the index-iteration method test the elements usingis
first. While the document says thatx is x
means thatx == x
should be true, it is not true for example in the case ofnan
: