2011-12-22 48 views

Odpowiedz

71

Ponieważ Python jest open source, można przeczytać source code.

Aby dowiedzieć się, jaki plik został zaimplementowany w danym module lub funkcji, można zazwyczaj wydrukować atrybut __file__. Alternatywnie możesz użyć modułu inspect, patrz sekcja Retrieving Source Code w dokumentacji inspect.

Dla wbudowanych klas i metod nie jest to tak proste, ponieważ inspect.getfile i inspect.getsource zwróci błąd typu stwierdzający, że obiekt jest wbudowany. Jednak wiele wbudowanych typów można znaleźć w Objects sub-directory of the Python source trunk. Na przykład zobacz here dla implementacji klasy wyliczeniowej lub here dla implementacji typu list.

+0

Czy możesz podać przykład z 'wyliczeniem'? – Benjamin

+2

Można sprawdzić sposób testowania wyliczenia wbudowanego [tutaj] (http://hg.python.org/cpython/file/b36cb4602e21/Lib/test/test_enumerate.py). – Makoto

+3

kod wyliczeniowy to [tutaj] (http://svn.python.org/view/python/trunk/Objects/enumobject.c?view=markup) –

14

Powłoka iPython ułatwia: function? da ci dokumentację. function?? pokazuje również kod. ALE to działa tylko dla czystych funkcji Pythona.

Wtedy zawsze możesz download kod źródłowy dla (c) Python.

Jeśli interesują Cię pytonowe implementacje podstawowych funkcji, spójrz na źródło PyPy.

+1

PyPy używa RPython do większości wbudowanych rzeczy, które mogą być prawie tak niskie, jak C do prawie tak wysokiego poziomu jak Python. Zwykle jest pomiędzy. W obu przypadkach jest statycznie wpisany, więc tak naprawdę nie jest to Python. – delnan

+0

Zobacz wczesny projekt do przeglądania kodu źródłowego wbudowanej funkcji: https://github.com/punchagan/cinspect – Thomas

20

Oto odpowiedź Cookbook uzupełnić odpowiedź @Chris', CPython została przeniesiona do GitHub i Mercurial repo nie będzie już aktualizowany:

  1. zainstalować Git, jeśli to konieczne.
  2. git clone https://github.com/python/cpython.git

  3. kod będzie kasa do podkatalogu o nazwie cpython ->cd cpython

  4. Powiedzmy szukamy definicji print() ...
  5. egrep --color=always -R 'print' | less -R
  6. Aha! Zobacz: Python/bltinmodule.c ->builtin_print()

Ciesz się.

4

można po prostu użyć polecenia help(), aby uzyskać pomoc dotyczącą wbudowanych funkcji oraz kodu.

dla np: jeśli chcesz zobaczyć kod str(), wystarczy wpisać - help(str)

powróci tak,

>>> help(str) 
Help on class str in module __builtin__: 

class str(basestring) 
| str(object='') -> string 
| 
| Return a nice string representation of the object. 
| If the argument is a string, the return value is the same object. 
| 
| Method resolution order: 
|  str 
|  basestring 
|  object 
| 
| Methods defined here: 
| 
| __add__(...) 
|  x.__add__(y) <==> x+y 
| 
| __contains__(...) 
|  x.__contains__(y) <==> y in x 
| 
| __eq__(...) 
|  x.__eq__(y) <==> x==y 
| 
| __format__(...) 
|  S.__format__(format_spec) -> string 
| 
|  Return a formatted version of S as described by format_spec. 
| 
| __ge__(...) 
|  x.__ge__(y) <==> x>=y 
| 
| __getattribute__(...) 
-- More -- 
2

enter image description here

musiałem kopać trochę, aby znaleźć źródło następującej Built-in Functions, ponieważ wyszukiwanie przyniesie tysiące wyników. (Powodzenia szukając każdy z nich, aby dowiedzieć się, gdzie jest źródło)

W każdym razie, wszystkie te funkcje są zdefiniowane w bltinmodule.c Funkcje zacząć builtin_{functionname}

Wbudowany Źródło: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

2

Dość nieznanym źródłem jest Python Developer Guide.

W (nieco) ostatnim GH issue dodano nowy rozdział, aby odpowiedzieć na pytanie, które zadajesz: CPython Source Code Layout. Jeśli coś powinno się zmienić, również ten zasób zostanie zaktualizowany.

Powiązane problemy