[docs] [issue30969] Docs should say that `x is z or x == z` is used for `x in y` in containers that do not implement `__contains__`
Antti Haapala
report at bugs.python.org
Wed Jul 19 07:55:53 EDT 2017
New submission from Antti Haapala:
The doc reference/expressions.srt says that
> For user-defined classes which do not define __contains__() but do
> define __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 in raised that exception.
and
> Lastly, the old-style iteration protocol is tried: if a class defines
> __getitem__(), x in y is True if and only if there is a non-negative
> integer index i such that x == y[i], and all lower integer indices do
> not raise IndexError exception. (If any other exception is raised, it
> is as if in raised that exception).
The documentation doesn't match the implementation, which clearly does `x is y or x == y` to check if `x` is the element `y` from a container. Both the `__iter__` and the index-iteration method test the elements using `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`:
----------
assignee: docs at python
components: Documentation
messages: 298671
nosy: docs at python, ztane
priority: normal
severity: normal
status: open
title: Docs should say that `x is z or x == z` is used for `x in y` in containers that do not implement `__contains__`
type: enhancement
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30969>
_______________________________________
More information about the docs
mailing list