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 absolutely 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 truthfulness? 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, -gdg -- https://mail.python.org/mailman/listinfo/python-list