12

len() の仕組みを知りたいです。

len() を呼び出すたびにリストの最初から最後までカウントしますか、それともリストもクラスなので、len() はリストの長さを記録するリスト オブジェクトに変数を返すだけですか?

また、「len()」、「map()」などの組み込み関数のソース コードがどこにあるか教えていただければ幸いです。

4

2 に答える 2

18

ここから Python 2.7 ソース コードをダウンロードします: http://www.python.org/getit/releases/2.7.4/

list./Include/listobject.hおよびに実装されて./Objects/listobject.cいます。

typedef struct {
    PyObject_VAR_HEAD
    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
    PyObject **ob_item;

    /* ob_item contains space for 'allocated' elements.  The number
     * currently in use is ob_size.
     * Invariants:
     *     0 <= ob_size <= allocated
     *     len(list) == ob_size
     *     ob_item == NULL implies ob_size == allocated == 0
     * list.sort() temporarily sets allocated to -1 to detect mutations.
     *
     * Items must normally not be NULL, except during construction when
     * the list is not yet visible outside the function that builds it.
     */
    Py_ssize_t allocated;
} PyListObject;

list.__len__()ob_sizeの一部であるに相談するだけですPyObject_VAR_HEAD。これによりlen()、リストの一定時間の操作が行われます。

于 2013-04-27T07:21:07.283 に答える
2

組み込み関数のドキュメントはこちらにあります。

データ型は、list保持している要素の数を追跡しlen(list)、O(1) 操作です。


ソース コードについては、ダウンロード ページで Python のソース コードを見つけることができます。

于 2013-04-27T07:19:49.270 に答える