В статье рассказывается о Cython без всей нечитаемой документации. Для новичка самая большая проблема в создании программного обеспечения - это уметь понимать документацию по программному обеспечению. Из-за отсутствия надежных средних столбов и кормления с ложечки новички, как правило, теряют мотивацию к активному обучению. В этом посте рассказывается о ноу-хау Cython, не углубляясь в учебник в стиле документации.

Приведенный выше фрагмент - это то, чем я занимаюсь недавно, это называется кодом cython. Помните C / C ++? , где мы выполняем «статическую типизацию», что означает добавление объявлений статических типов с потерей читабельности. Вы также можете сделать это в Python с помощью Cython.

Что такое Cython?

Cython - это компилятор Python. Это означает, что он может компилировать обычный код Python без изменений (за некоторыми очевидными исключениями некоторых пока еще неподдерживаемых языковых функций, см. Ограничения Cython). Однако для кода, критичного к производительности, часто бывает полезно добавить объявления статического типа, поскольку они позволят Cython выйти за пределы динамической природы кода Python и сгенерировать более простой и быстрый код C - иногда быстрее на порядки.

Некоторые выводы и часто задаваемые вопросы из этого фрагмента:

  1. Что такое импорт?

cimport - это специальный оператор импорта. Когда модуль хочет использовать что-то, объявленное в файле определения другого модуля, он импортирует это с помощью оператора cimport.

2. Модуль Cython состоит из двух частей. Выше вы видите файл .pyx. Файл определения с суффиксом .pxd, содержащий объявления C, которые должны быть доступны для других модулей Cython, и файл реализации с суффиксом .pyx. , содержащий все остальное.

3. Функции в стиле C инициализируются с помощью cdef или cpdef. Вот в чем разница.

cdef используется для функций Cython, которые должны быть чистыми функциями «C». Все типы должны быть объявлены.

cpdef функции объединяют как def, так и cdef, создавая две функции; cdef для типов C и def для типов Python. При этом используется раннее связывание, так что cpdef функции могут работать как можно быстрее при использовании основных типов C (с помощью cdef). cpdef функции используют динамическое связывание при передаче объектов Python, и это может быть намного медленнее, возможно, так же медленно, как def объявленные функции.

В следующей части мы поговорим о файле установки и внутренней работе PyObject в C API. Не стесняйтесь задавать вопросы в комментариях ниже.

Подписывайтесь на меня в LinkedIn, Github.

Спасибо!