Поиск исходного кода для встроенных функций Python? - PullRequest
106 голосов
/ 22 декабря 2011

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

Ответы [ 6 ]

106 голосов
/ 22 декабря 2011

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

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

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

29 голосов
/ 15 ноября 2014

Вот ответ поваренной книги на дополнение @ ответ Криса , CPython перешел на GitHub и хранилище Mercurial больше не будет обновляться:

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

  3. Код будет извлечен в подкаталог с именем cpython -> cd cpython

  4. Допустим, мы ищем определение print() ...
  5. egrep --color=always -R 'print' | less -R
  6. Aha! См Python/bltinmodule.c -> builtin_print()

Наслаждайтесь.

17 голосов
/ 22 декабря 2011

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

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

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

12 голосов
/ 19 ноября 2017

enter image description here

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

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

Встроенный источник: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

Для встроенных типов: https://github.com/python/cpython/tree/master/Objects

6 голосов
/ 09 декабря 2016

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 ():

, которые вы можете просто использовать *Команда 1028 * для получения справки о встроенных функциях, а также ее код.

, например: если вы хотите увидеть код для 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  --
5 голосов
/ 06 января 2018

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

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

...