Czy istnieje sposób, aby zobaczyć, jak działają funkcje wbudowane w Pythonie? Nie chodzi mi tylko o to, jak ich używać, ale także w jaki sposób zostały zbudowane, jaki jest kod za posortowaniem lub wyliczeniem itp ...?
źródło
Czy istnieje sposób, aby zobaczyć, jak działają funkcje wbudowane w Pythonie? Nie chodzi mi tylko o to, jak ich używać, ale także w jaki sposób zostały zbudowane, jaki jest kod za posortowaniem lub wyliczeniem itp ...?
Ponieważ Python jest open source, możesz czytać kod źródłowy .
Aby dowiedzieć się, w jakim pliku jest zaimplementowany określony moduł lub funkcja, zazwyczaj można wydrukować __file__
atrybut. Alternatywnie możesz użyć inspect
modułu, zobacz sekcję Pobieranie kodu źródłowego w dokumentacji inspect
.
W przypadku klas i metod wbudowanych nie jest to takie proste, ponieważ inspect.getfile
i inspect.getsource
zwróci błąd typu informujący, że obiekt jest wbudowany. Jednak wiele typów wbudowanych można znaleźć w Objects
podkatalogu pnia źródłowego języka Python . Na przykład zobacz tutaj implementację klasy wyliczeniowej lub tutaj implementację list
typu.
enumerate
?sorted()
znajduje się w /Python/bltinmodule.c, chociaż po prostu wywołuje,list.sort()
więc prawdziwe źródło znajduje się w /Objects/listobject.cOto odpowiedź z książki kucharskiej uzupełniająca odpowiedź @Chris , CPython przeniósł się do GitHub, a repozytorium Mercurial nie będzie już aktualizowane:
git clone https://github.com/python/cpython.git
Kod przejdzie do podkatalogu o nazwie
cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
Cieszyć się.
źródło
Musiałem trochę poszperać, aby znaleźć źródło następujących danych,
Built-in Functions
ponieważ wyszukiwanie przyniosłoby tysiące wyników. (Powodzenia w szukaniu któregokolwiek z nich, aby dowiedzieć się, gdzie jest jego źródło)W każdym razie wszystkie te funkcje są zdefiniowane w
bltinmodule.c
funkcjach zaczynających się odbuiltin_{functionname}
źródło
listobject.c
github.com/python/cpython/tree/master/ObjectsPlik Ipython powłoka sprawia, że to proste:
function?
daje dokumentację.function??
pokazuje również kod. ALE to działa tylko dla czystych funkcji Pythona.Wtedy możesz zawsze pobrać kod źródłowy (c) Pythona.
Jeśli interesują Cię implementacje podstawowych funkcji w języku Python, zajrzyj do źródła PyPy .
źródło
2 metody,
help()
inspect
1) sprawdzić:
użyj modułu inpsect do eksploracji kodu, który chcesz ... UWAGA: możesz eksplorować kod tylko dla modułów (czyli pakietów), które zaimportowałeś
na przykład:
2) pomoc ():
możesz po prostu użyć
help()
polecenia, aby uzyskać pomoc dotyczącą wbudowanych funkcji, a także ich kodu.na przykład: jeśli chcesz zobaczyć kod dla str (), po prostu wpisz -
help(str)
powróci w ten sposób,
źródło
Dość nieznanym zasobem jest Podręcznik programisty języka Python .
W (nieco) niedawnym wydaniu GH , dodano nowy rozdział, aby odpowiedzieć na pytanie, które zadajesz : Układ kodu źródłowego CPython . Jeśli coś się zmieni, ten zasób również zostanie zaktualizowany.
źródło
Jak wspomniał @Jim, organizacja plików jest opisana tutaj . Przedrukowano w celu ułatwienia odkrycia:
źródło