Поиск исходного кода для встроенных функций Python?

Есть ли способ увидеть, как встроенные функции работают в python? Я не имею в виду, как их использовать, но также как они были построены, каков код, отсортированный или перечислимый и т.д....?

Ответ 1

Поскольку Python является открытым исходным кодом, вы можете прочитать исходный код.

Чтобы узнать, какой файл используется в конкретном модуле или функции, вы обычно можете распечатать атрибут __file__. В качестве альтернативы вы можете использовать модуль inspect, см. Раздел " Извлечение исходного кода" в документации по inspect.

Для встроенных классов и методов это не так просто, поскольку inspect.getfile и inspect.getsource возвращают ошибку типа, inspect.getsource, что объект встроен. Тем не менее, многие из встроенных типов можно найти в подкаталоге Objects соединительной линии Python. Например, см. Здесь для реализации класса enumerate или здесь для реализации типа list.

Ответ 2

Вот ответ поваренной книги, чтобы дополнить ответ @Chris, CPython переместился в GitHub, и репозиторий Mercurial больше не будет обновляться:

  1. При необходимости установите Git.
  2. git clone https://github.com/python/cpython.git

  3. Код будет cpython в подкаталоге cpythoncd cpython

  4. Скажем, мы ищем определение print()...
  5. egrep --color=always -R 'print' | less -R
  6. Ага! См. Python/bltinmodule.cbuiltin_print()

Наслаждаться.

Ответ 3

iPython оболочка делает это проще: function? предоставит вам документацию. function?? показывает также код. НО это работает только для чистых функций python.

Тогда вы всегда можете download исходный код для (c) Python.

Если вы заинтересованы в реализации pythonic основных функций, посмотрите PyPy.

Ответ 4

enter image description here

Мне пришлось немного покопаться, чтобы найти источник следующего Built-in Functions, так как поиск даст тысячи результатов. (Удачи в поиске любого из них, чтобы найти источник)

В любом случае, все эти функции определены в bltinmodule.c Функции начинаются с builtin_{functionname}

Built-in Source: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

For Built-in Types: https://github.com/python/cpython/tree/master/Objects

Ответ 5

2 метода,

  1. Вы можете проверить использование обрезки с help()
  2. Вы можете проверить скрытый код для этих модулей, использующих inspect

1) проверить:

используйте inpsect модуль для изучения кода, который вы хотите... ПРИМЕЧАНИЕ: вы можете изучить код только для модулей (ака) пакетов, которые вы импортировали

например:

  >>> import randint  
  >>> from inspect import getsource
  >>> getsource(randint) # here i am going to explore code for package called 'randint'

2) help():

вы можете просто использовать команду help() чтобы получить помощь о встроенных функциях, а также его код.

например: если вы хотите увидеть код для str(), просто введите - help(str)

он вернется так,

>>> 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  --

Ответ 6

Довольно неизвестным ресурсом является Python Руководство разработчика.

В (несколько) недавней проблеме GH issue была добавлена новая глава для ответа на вопрос, который вы задаете: Структура исходного кода CPython. Если что-то должно измениться, этот ресурс также будет обновлен.

Ответ 7

Как уже упоминалось @Jim, организация файлов описана здесь. Воспроизведено для удобства обнаружения:

Для модулей Python типичное расположение:

Lib/<module>.py
Modules/_<module>.c (if theres also a C accelerator module)
Lib/test/test_<module>.py
Doc/library/<module>.rst

For extension-only modules, the typical layout is:

Modules/<module>module.c
Lib/test/test_<module>.py
Doc/library/<module>.rst

Для встроенных типов типичное расположение:

Objects/<builtin>object.c
Lib/test/test_<builtin>.py
Doc/library/stdtypes.rst

Для встроенных функций типичное расположение:

Python/bltinmodule.c
Lib/test/test_builtin.py
Doc/library/functions.rst

Some exceptions:

builtin type int is at Objects/longobject.c
builtin type str is at Objects/unicodeobject.c
builtin module sys is at Python/sysmodule.c
builtin module marshal is at Python/marshal.c
Windows-only module winreg is at PC/winreg.c