Предыстория: Когда я сегодня читаю исходный код, я чувствую любопытство по поводу @staticmethod
, и я думаю, что этот декоратор может быть реализован с использованием класса, который имеет метод __get__
. Это действительно может быть сделано, но это не так эффективно, поэтому я думаю, что, возможно, python использует другие способы, такие как завершение его в исходном коде C. Я использую grep и нахожу, что это было упомянуто в funcobject.h
:
/* The classmethod and staticmethod types lives here, too */
PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
но это всего лишь заголовочный файл, и я не знаю, как продолжить исследование.
Итак, я здесь на вопрос:
Когда я хочу выяснить реализацию какой-либо функции, есть ли какой-нибудь эффективный метод (или методы), которым я могу следовать?
Например: как Python реализовал sort()
, он использовал быструю сортировку или сортировку слиянием? Как долго это будет потреблять? O (nlogn) или O (n2)?