Внесите 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 работать намного быстрее. Это нежное введение. Вы можете пойти дальше и сделать его более сложным в соответствии с вашими потребностями. Обратите внимание, что примеры приведены в иллюстративных целях; их можно оптимизировать.