Внесите C в свой код Python всего за несколько шагов!

Я уверен, что вы слышали, как многие люди жалуются, что Python такой медленный. Я вижу, что люди сравнивают Python с C только в контексте производительности, но не в контексте быстрой разработки. Время разработки Python настолько короткое, потому что вам не нужно иметь дело с указателями, управлением памятью и т. Д.

Это одна из причин, по которой мы используем Python в нашей компании. В большинстве случаев время разработки важнее производительности. У Python отличное сообщество и отличные библиотеки, которые большую часть времени работают для того, что вам нужно. При этом я расскажу о Cython в этой статье, чтобы сделать ваш код Python быстрым. Давайте нырнем!

Cython: C-расширения для Python

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

Установка Cython

Обратите внимание, что вам понадобится компилятор C. Вы можете получить его в зависимости от вашей ОС. Затем вам нужно установить Cython, как показано ниже.

pip install Cython

Выгода от объявления статического типа

Вы можете добавлять объявления статического типа к своим переменным и функциям. Это даст вам лучшую производительность. Вы можете использовать все типы C для объявлений, таких как int, float, double и т. Д.

Объявление переменной в Cython

cdef int i = 10

Если вы никогда не использовали этот синтаксис, это означает, что вы объявляете переменную i, которая является целым числом.

Объявление функции в Cython

cdef int square(int x):
    return x ** 2

Это в основном означает, что функция square принимает целочисленный параметр x и возвращает целочисленное значение x**2, которое является квадратом x.

cdef объявленные функции не будут видны вашему коду Python при импорте модуля. Чтобы сделать его видимым, вам нужно использовать cpdef вместо .

Вычисление факториала в Python

Давайте напишем функцию Python, которая вычисляет факториал заданного целого числа.

Сделайте это быстрее с Cython

Создайте файл pyx

cpdef long fastfactorial: эта функция вернет длинное значение, поэтому мы объявляем его как long, помещая long перед именем функции fastfactorial.

long n: Мы ожидаем, что n будет long.

Создайте установочный файл

Теперь нам нужно создать setup.py файл для перевода Cython на C.

Скомпилируйте код

Чтобы выполнить эту компиляцию, мы запустим эту команду.

--inplace: этот параметр создает файл общих объектов в вашем рабочем каталоге.

python3 setup.py build_ext --inplace

Поздравляю! Вы сделали это!

Co mparison

Давай сравним их! Я поставлю время выполнения вместе с функцией печати, чтобы вы увидели разницу.

Посмотрите на разницу: он почти в 88 раз быстрее!

Заключение

Несколькими прикосновениями вы заставили ваш код Python работать намного быстрее. Это нежное введение. Вы можете пойти дальше и сделать его более сложным в соответствии с вашими потребностями. Обратите внимание, что примеры приведены в иллюстративных целях; их можно оптимизировать.