2013-04-27 25 views
10

Chcę się dowiedzieć, jak działa len().Jak ustawić długość listy w języku Python

Czy liczyć od początku do końca listy za każdym razem, gdy wywołuję len(), lub, ponieważ lista jest również klasą, czy len() po prostu zwraca zmienną w obiekcie listy, który rejestruje długość listy?

także, mam nadzieję, że ktoś może mi powiedzieć, gdzie mogę znaleźć kod źródłowy tych wbudowanych funkcji, takich jak „len()”, 'map(), itd.

+0

Wywołuje metodę '__len__' obiektu listy. Możesz zobaczyć źródło tutaj: http://svn.python.org/view/python/tags/r27/Objects/listobject.c?view=markup – Blender

+0

śledzi jego długość, więc nie opowiadać za każdym razem .. –

+0

Tutaj jest źródło wbudowanych: http://hg.python.org/releasing/2.7.4/file/9290822f2280/Python/bltinmodule.c#l928 – Blender

Odpowiedz

16

Pobierz Python 2.7 kod źródłowy tutaj: http://www.python.org/getit/releases/2.7.4/

list jest realizowany w ./Include/listobject.h i ./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__() tylko konsultuje ob_size, który jest częścią PyObject_VAR_HEAD. To sprawia, że ​​len() jest operacją ciągłą dla list.

+0

Powinieneś prawdopodobnie uwzględnić PyObject_VAR_HEAD, ponieważ jest to najbardziej istotne. – jamylak

+0

Bezpośredni link do źródła pliku nagłówkowego: https://svn.python.org/projects/python/trunk/Include/listobject.h – hoju

1

Cóż, można znaleźć dokumentacja wbudowanych funkcji here.

Typ danych list śledzi liczbę elementów, które trzyma, len(list) jest operacją O (1).


dla kodu źródłowego można znaleźć kod źródłowy Pythona na the download page.

Powiązane problemy