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对象/结构的属性。