Есть ли способ увидеть, как встроенные функции работают в Python? Я имею в виду не только то, как их использовать, но и то, как они были созданы, какой код стоит за сортировкой или перечислением и т. Д.?
источник
Есть ли способ увидеть, как встроенные функции работают в Python? Я имею в виду не только то, как их использовать, но и то, как они были созданы, какой код стоит за сортировкой или перечислением и т. Д.?
Поскольку Python является открытым исходным кодом, вы можете прочитать исходный код .
Чтобы узнать, в каком файле реализован конкретный модуль или функция, вы обычно можете распечатать __file__
атрибут. В качестве альтернативы вы можете использовать inspect
модуль, см. Раздел « Получение исходного кода» в документации inspect
.
Для встроенных классов и методов это не так просто , так inspect.getfile
и inspect.getsource
будет возвращать ошибку типа о том , что объект встроен. Тем не менее, многие из встроенных типов можно найти в Objects
подкаталоге исходной магистрали Python . Например, см. Здесь реализацию класса enumerate или здесь реализацию list
типа.
enumerate
?sorted()
находится в /Python/bltinmodule.c, хотя он просто вызывает,list.sort()
поэтому реальный источник находится в /Objects/listobject.c__file__
open()
функции определеныModules/_io/_iomodule.c
в Python 3 (а не среди других встроенных функций ).Вот ответ поваренной книги, дополняющий ответ @Chris , CPython переместился на GitHub, и репозиторий Mercurial больше не будет обновляться:
git clone https://github.com/python/cpython.git
Код будет оформлен в подкаталог с именем
cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
Наслаждаться.
источник
Мне пришлось немного покопаться, чтобы найти источник следующего,
Built-in Functions
поскольку поиск дал бы тысячи результатов. (Удачи в поисках любого из них, чтобы найти его источник)В любом случае, все эти функции определены в
bltinmodule.c
разделе Функции, начинающиеся сbuiltin_{functionname}
источник
listobject.c
github.com/python/cpython/tree/master/ObjectsIPython оболочка делает это легко:
function?
даст вам документацию.function??
показывает также код. НО это работает только для чистых функций Python.Тогда вы всегда можете скачать исходный код для (c) Python.
Если вас интересуют питонические реализации основных функций, взгляните на исходный код PyPy .
источник
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 --
источник
Довольно неизвестный ресурс - это Руководство разработчика Python .
В (несколько) недавнем выпуске GH была добавлена новая глава для ответа на вопрос, который вы задаете: Макет исходного кода CPython . Если что-то изменится, этот ресурс также будет обновлен.
источник
Как упомянул @Jim, здесь описана файловая организация . Воспроизведено для простоты обнаружения:
источник