谁能解释len()函数在内部如何工作?

Dan*_*ues -1 python list python-3.x

我对该len()函数如何在python3内部工作(如何实现)感兴趣。

有人可以帮我吗?

Dee*_*ace 10

没那么有趣。它只是调用__len__对象的方法。

如果您要询问__len__内置的中的特定实现list,那么它就没那么有趣了。list实例将其长度保留在一个属性中(至少在CPython中),以节省迭代的需要(因此进行len(list)O(1)而不是O(n)操作)。

CPython:

static Py_ssize_t
list_length(PyListObject *a)
{
    return Py_SIZE(a);
}
Run Code Online (Sandbox Code Playgroud)

Py_SIZE 被定义为宏

static Py_ssize_t
list_length(PyListObject *a)
{
    return Py_SIZE(a);
}
Run Code Online (Sandbox Code Playgroud)

因此,len(list)只需获取ob_size基础C对象/结构的属性。