Есть ли способ увидеть, как встроенные функции работают в python? Я не имею в виду, как их использовать, но также как они были построены, каков код, отсортированный или перечислимый и т.д....?
Поиск исходного кода для встроенных функций Python?
Ответ 1
Поскольку Python является открытым исходным кодом, вы можете прочитать исходный код.
Чтобы узнать, какой файл используется в конкретном модуле или функции, вы обычно можете распечатать атрибут __file__
. В качестве альтернативы вы можете использовать модуль inspect
, см. Раздел " Извлечение исходного кода" в документации по inspect
.
Для встроенных классов и методов это не так просто, поскольку inspect.getfile
и inspect.getsource
возвращают ошибку типа, inspect.getsource
, что объект встроен. Тем не менее, многие из встроенных типов можно найти в подкаталоге Objects
соединительной линии Python. Например, см. Здесь для реализации класса enumerate или здесь для реализации типа list
.
Ответ 2
Вот ответ поваренной книги, чтобы дополнить ответ @Chris, CPython переместился в GitHub, и репозиторий Mercurial больше не будет обновляться:
- При необходимости установите Git.
-
git clone https://github.com/python/cpython.git
-
Код будет
cpython
в подкаталогеcpython
→cd cpython
- Скажем, мы ищем определение
print()
... -
egrep --color=always -R 'print' | less -R
- Ага! См.
Python/bltinmodule.c
→builtin_print()
Наслаждаться.
Ответ 3
iPython оболочка делает это проще: function?
предоставит вам документацию. function??
показывает также код. НО это работает только для чистых функций python.
Тогда вы всегда можете download исходный код для (c) Python.
Если вы заинтересованы в реализации pythonic основных функций, посмотрите PyPy.
Ответ 4
Мне пришлось немного покопаться, чтобы найти источник следующего 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 метода,
- Вы можете проверить использование обрезки с
help()
- Вы можете проверить скрытый код для этих модулей, использующих
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