Как посмотреть код базовых методов и функций?

Рейтинг: 2Ответов: 2Опубликовано: 26.03.2023

Хочу порыться в базовых методах Python, но получается это с переменным успехом.
Вот почему:

  • Иногда я через Ctrl + нажатие открываю код метода и там всё читабельно и можно посмотреть.
  • Иногда через такое же действие я открываю, но там вижу что-то подобное
def __len__(self) -> int: ...
def __contains__(self, __o: object) -> bool: ...
def __iter__(self) -> Iterator[_T]: ...
def __and__(self, __value: AbstractSet[object]) -> set[_T]: ...
def __iand__(self, __value: AbstractSet[object]) -> Self: ...

Код отличается тем, что функции как бы "свёрнуты" а развернуть их нельзя, потому что по сути нечего разворачивать. Это не свёрнутые строки. Файл, к слову, отличается расширением. Не .py, а .pyi

Подскажите, как достучаться до нормального кода?

Ответы

▲ 4Принят

Файлы с расширением .pyi - это так называемые файлы-заглушки, в них находятся заголовки функций, а не они сами. Логика таких функций написаны на языке программирования C и их можно найти в репозитории исходного кода CPython на GitHub.

PS1: Встроенные функции находятся в файле Python/bltinmodule.c.

PS2: Если интересно, вот исходный код функции len:

static PyObject *
builtin_len(PyObject *module, PyObject *obj)
{
    Py_ssize_t res;

    res = PyObject_Size(obj);
    if (res < 0) {
        assert(PyErr_Occurred());
        return NULL;
    }
    return PyLong_FromSsize_t(res);
}

PS3: Все файлы .pyi находятся не в проекте CPython. а в Typeshed.

▲ 1

Они написаны на c. Нужно пойти в репозиторий в гитхабе и там смотреть код проекта cpython. https://github.com/python/cpython