为什么 max() 和 min() 不能有效地处理 Python 3 中的范围对象?

Why don't max() and min() work efficiently for range objects in Python 3?

正如 所解释的那样,Python 3 中的 range 个对象足够聪明,能够有效地测试成员资格:

In [1]: 1000000000000000 in range(1000000000000001)
Out[1]: True    # answer returned very quickly

然而,用maxminrange的最大值和最小值求值时情况并非如此,这似乎遍历了整个序列以找到这些值:

In [2]: max(range(1000000000000001))   # don't do this
...

range对象有效地实现这些功能是微不足道的,那么为什么没有实现呢?是否缺少一些实施细节或边缘情况?

max 接受给定的序列,不对类型做任何假设。无论它是 range 对象、列表还是生成器,都会在 O(n) 时间内简单地迭代序列。

其他一些运算符和函数遵循 dunder 方法,然后计算结果。在 range 的情况下,in 调用 __contains__ dunder 方法,然后计算是否 low <= item < high,基本上。所以它是 python3.

中的 O(1)