Do not promote `None` as the first argument to `filter` in documentation.
This thought occurred to me several times, but I could not decide to write.
And since `filter` is a builtin, I think this change should be discussed
here, before opening an issue on bug tracker.
I propose to delete all references in the `filter` documentation that the
first argument can be `None`, with possible depreciation of `None` as the
the first argument - FutureWarning in Python 3.8+ and deleting this option
in Python 4. Personally, regarding the last point - depreciation, I do not
see this as a great necessity, but I do not find that the option with `None`
should be offered and suggested through the documentation. Instead, it is
better to show an example with using `filter(bool, iterable)` which is
equivalent, more readable, but a little bit slower.
%timeit [*filter(None, range(10))]
503 ns ? 0.259 ns per loop (mean ? std. dev. of 7 runs, 1000000 loops each)
%timeit [*filter(bool, range(10))]
512 ns ? 1.09 ns per loop (mean ? std. dev. of 7 runs, 1000000 loops each)
Currently documentation for `None` case uses `identity function is
assumed`, what is this `identity` and how it is consistent with
In addition, this change makes the perception of `map` and `filter` more
consistent,with the rule that first argument must be `callable`.
I see only one moment with `None`, since `None` is a keyword, the behavior
of `filter(None, iterable)` is alsways guaranteed, but with `bool` it is
not. Nevertheless, we are all adults here.
With kind regards,