[Python, Программирование] Ускоряем код на Python с помощью Nim (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет, хабровчане. В преддверии старта курса "Python Developer. Basic" подготовили для вас перевод интересной статьи. Также приглашаем на открытый вебинар «Карьера для "Python Developer. Basic"».
Python — один из самых популярных и доступных языков программирования, но далеко не самый быстрый. Многие создатели библиотек и фреймворков прибегали к использованию расширения на С, чтобы их код работал быстрее, чем код на нативном Python. Этот способ вполне рабочий, но если вы не знакомы с С, сборка мусора и управление памятью станут вашим адом на Земле. И тут на сцену выходит Nim.Что такое Nim?Nim – статически типизированный, компилируемый, объектно-ориентированный язык программирования. Nim создавался, чтобы быть таким же быстрым как С и таким же выразительным как Python, и к тому же, расширяемым как Lisp. Благодаря синтаксическому сходству с Python, Nim станет отличным выбором языка для расширения, если с C вам не по пути.Начало работы с NimЧтобы начать писать на Nim, его нужно установить в свою систему. Скачайте и установите его с сайта nim-lang.org.Как только вы закончите, мы начнем писать свой первый код на Nim. Во-первых, мы создаем файл, я назову его hello.nim, а вы можете назвать его как захотите. Теперь мы откроем его в любом текстовом редакторе и напишем:
static:
echo("Hello, world!")
Сохраните и закройте файл, затем откройте терминал из текущей директории и введите:
nim compile hello.nim
И вуаля! В консоль выведется «Hello, World!». После получения первого представления о Nim перейдем к основной теме статьи.Встраиваем Nim в приложения на PythonNim поставляется с модулем nimpy и nimporter, которые доступны для Python. Последний можно установить с помощью pip install nimporter. Эти два пакета будут иметь важное значение при совместной работе двух языков.Чтобы продемонстрировать возможности Nim, мы создадим простой тест, который будет сравнивать скорость работы обоих языков, на примере функции находящей n-ое число последовательности Фибоначчи.Давайте создадим папку под названием Benchmark с 3 файлами внутри:
- main.py — файл, который мы будем запускать
- nmath.nim — файл с версией функции fib на Nim
- pmath.py — файл с версией функции fib на Python
Сначала напишем функцию fib на Python:
def fib(n):
if n == 0:
return 0
elif n < 3:
return 1
return fib(n - 1) + fib(n - 2)
А теперь переместимся в nmath.nim. Для начала нам нужно импортировать nimpy:
import nimpy
Прямо как в Python, не так ли? А теперь сама функция:
import nimpy
proc fib(n: int): int {.exportpy.} =
if n == 0:
return 0
elif n < 3:
return 1
return fib(n-1) + fib(n-2)
Давайте разберемсяМы определяем функцию fib с помощью ключевого слова proc. Дальше указываем тип возвращаемого значения как целочисленный, а (вау, что это такое?) {.exportpy.} сигнализирует Nim, что эта функция предназначена для использования в другом модуле Python. В остальном все также, как в Python.Тестирование на времяВ main.py создадим простой бенчмарк:
import nimporter
from time import perf_counter
import nmath # Nim imports!
import pmath
print('Measuring Python...')
start_py = perf_counter()
for i in range(0, 40):
print(pmath.fib(i))
end_py = perf_counter()
print('Measuring Nim...')
start_nim = perf_counter()
for i in range(0, 40):
print(nmath.fib(i))
end_nim = perf_counter()
print('---------')
print('Python Elapsed: {:.2f}'.format(end_py - start_py))
print('Nim Elapsed: {:.2f}'.format(end_nim - start_nim))
Вот и все!Пакет importer позволяет импортировать Nim в обычные модули Python, которые будут использоваться также, как и собственные. Круто, не правда ли?Чтобы запустить код, просто введите python main.py в командную строку и смотрите, что будет!
Python Elapsed: 33.60
Nim Elapsed: 1.05
ЗаключениеВот и все, что нужно сделать, чтобы быстро встроить Nim в Python. Nim оказался примерно в 30 раз быстрее, но имейте ввиду, что разница в скорости может варьироваться в зависимости от выполняемой задачи. Чтобы узнать больше о Nim, рекомендую ознакомиться с официальной документацией и почитать про него в Википедии.Что ж, на этом я закончу свой туториал! Спасибо, что дотерпели до конца. Надеюсь, эта статья окажется для вас полезной.
Узнать подробнее о курсе "Python Developer. Basic".
Смотреть запись открытого demo-урока «Три кита: map(), filter() и zip()».
===========
Источник:
habr.com
===========
===========
Автор оригинала: wulf
===========Похожие новости:
- [Open source, Программирование, C++] Overview of recent changes in rotor (v0.10… v0.14)
- [Open source, Программирование, C++] Обзор последних изменений в rotor'е (v0.10… v0.14)
- [Спортивное программирование, Программирование, Разработка игр, Искусственный интеллект] Устройство игрового бота: 16-е место в финале Russian AI Cup 2020 (и 5-е после)
- [Программирование, Java] Project Loom: Современная маcштабируемая многопоточность для платформы Java
- [Разработка на Raspberry Pi, Умный дом, Интернет вещей, Микросервисы] Первый опыт с Raspberry Pi или микросервисы для дома
- Уязвимость в Python, проявляющаяся при обработке непроверенных дробных чисел в ctypes
- [Разработка веб-сайтов, JavaScript, Программирование, VueJS] Улучшение производительности vue приложения
- [Программирование, C++, Работа с 3D-графикой, Разработка игр, CGI (графика)] Vulkan. Руководство разработчика. Image view (перевод)
- [Программирование, Visual Studio, DevOps, Микросервисы] Шаблон микросервиса: зачем нужен и как его внедрить в разработку
- [Высокая производительность, Программирование, Go] Ручное управление памятью в языке Go (перевод)
Теги для поиска: #_python, #_programmirovanie (Программирование), #_python, #_nim, #_coding, #_computer_science, #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_python, #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:35
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет, хабровчане. В преддверии старта курса "Python Developer. Basic" подготовили для вас перевод интересной статьи. Также приглашаем на открытый вебинар «Карьера для "Python Developer. Basic"».
Python — один из самых популярных и доступных языков программирования, но далеко не самый быстрый. Многие создатели библиотек и фреймворков прибегали к использованию расширения на С, чтобы их код работал быстрее, чем код на нативном Python. Этот способ вполне рабочий, но если вы не знакомы с С, сборка мусора и управление памятью станут вашим адом на Земле. И тут на сцену выходит Nim.Что такое Nim?Nim – статически типизированный, компилируемый, объектно-ориентированный язык программирования. Nim создавался, чтобы быть таким же быстрым как С и таким же выразительным как Python, и к тому же, расширяемым как Lisp. Благодаря синтаксическому сходству с Python, Nim станет отличным выбором языка для расширения, если с C вам не по пути.Начало работы с NimЧтобы начать писать на Nim, его нужно установить в свою систему. Скачайте и установите его с сайта nim-lang.org.Как только вы закончите, мы начнем писать свой первый код на Nim. Во-первых, мы создаем файл, я назову его hello.nim, а вы можете назвать его как захотите. Теперь мы откроем его в любом текстовом редакторе и напишем: static:
echo("Hello, world!") nim compile hello.nim
def fib(n):
if n == 0: return 0 elif n < 3: return 1 return fib(n - 1) + fib(n - 2) import nimpy
import nimpy
proc fib(n: int): int {.exportpy.} = if n == 0: return 0 elif n < 3: return 1 return fib(n-1) + fib(n-2) import nimporter
from time import perf_counter import nmath # Nim imports! import pmath print('Measuring Python...') start_py = perf_counter() for i in range(0, 40): print(pmath.fib(i)) end_py = perf_counter() print('Measuring Nim...') start_nim = perf_counter() for i in range(0, 40): print(nmath.fib(i)) end_nim = perf_counter() print('---------') print('Python Elapsed: {:.2f}'.format(end_py - start_py)) print('Nim Elapsed: {:.2f}'.format(end_nim - start_nim)) Python Elapsed: 33.60
Nim Elapsed: 1.05 Узнать подробнее о курсе "Python Developer. Basic".
Смотреть запись открытого demo-урока «Три кита: map(), filter() и zip()». =========== Источник: habr.com =========== =========== Автор оригинала: wulf ===========Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_python, #_programmirovanie ( Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:35
Часовой пояс: UTC + 5