📜  Python中 len()函数的内部工作

📅  最后修改于: 2022-05-13 01:54:46.498000             🧑  作者: Mango

Python中 len()函数的内部工作

Python中的len()函数有一个非常奇特的特性,这是人们经常想知道的。无论数据的大小或类型如何,计算可迭代数据结构(字符串、数组、元组等)的长度绝对不需要时间,而且时间相等。这显然意味着O(1)时间复杂度。但是你有没有想过如何?

Python遵循这样的理念,即保持长度作为属性既便宜又易于维护。 len()实际上是一个调用方法 '__len__()' 的函数。此方法在可迭代数据结构的预定义类中定义。这个方法实际上作为一个计数器,随着数据的定义和存储而自动递增。因此,当您调用len()函数时,您不会向解释器提供通过遍历查找长度的命令,而是要求解释器打印一个已经存储的值。因此, Python中的len()函数以O(1)复杂度运行。

因此也可以定义为:

def length(ar):
   
    # calling the internally 
    # defined __len__() method
    return ar.__len__() 
  
# Driver code
a = [1, 2, 3, 4]
print(length(a))

输出:

4

注意:这似乎非常有益,但请记住,它在数据定义阶段给解释器带来了巨大的负担。这是Python在竞争性编程中速度较慢的众多原因之一,尤其是在输入量很大的情况下。