10 Лучших Примеров по Ускорению Кода на Python

Python — это мощный и простой в использовании язык программирования. Однако, его интерпретируемая природа иногда приводит к более медленному выполнению кода по сравнению с компилируемыми языками. В этой статье мы рассмотрим 10 лучших примеров и советов по ускорению вашего Python-кода.
Больше крутых Python фишек в моем тг канале.
1. Использование встроенных функций и библиотек
Встроенные функции Python и библиотеки, такие как numpy
, часто более оптимизированы, чем эквивалентные самописные функции.
# Медленный способ
result = []for i in range(1000000):
result.append(i * 2)
# Быстрый способ
result = [i * 2 for i in range(1000000)]
2. Использование numpy
для численных операций
Библиотека numpy
значительно ускоряет операции с массивами чисел.
import numpy as np
# Медленный способ
result = [i * 2 for i in range(1000000)]
# Быстрый способ
arr = np.arange(1000000)
result = arr * 2
3. Использование multiprocessing
для параллелизма
Для задач, которые могут быть распараллелены, multiprocessing
может значительно ускорить выполнение.
from multiprocessing import Pool
def square(x):
return x * x
# Медленный способ
result = [square(i) for i in range(1000000)]
# Быстрый способ
with Pool(4) as p:
result = p.map(square, range(1000000))
4. Компиляция с использованием Cypthob
Cython
позволяет компилировать Python-код в C для ускорения выполнения.
# example.pyx
def square(int x):
return x * x
# В терминале
# cythonize -i example.pyx
5. Избегайте глобальных переменных
Глобальные переменные могут замедлить выполнение из-за их поиска в глобальной области видимости.
# Медленный способ
global_var = 0
def increment():
global global_var
global_var += 1
# Быстрый способ
def increment(local_var):
return local_var + 1
6. Используйте Генераторы списков с вложенными циклами
Генераторы списков могут использовать вложенные циклы для создания новых списков. И если у нас есть 2 списка, и вы хотите получить список всех возможных пар элементов из этих списков, вы можете использовать такой синтаксис
2345
list1 = [1, 2, 3]list2 = ['a', 'b', 'c']pairs = [(x, y) for x in list1 for y in list2]print(pairs)
# Output: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
7. Использование функции lry_cache для мемоизации
functools.lru_cache
может кэшировать результаты вызова функции для ускорения повторных вычислений.
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
8. Сортировка с использованием ключевых функций
Функция sorted
с аргументом key
может быть быстрее для сложных критериев сортировки.
data = ["apple", "orange", "banana", "grape"]
# Медленный способ
data.sort(lambda x: len(x))
# Быстрый способ
data.sort(key=len)
9. Использование Itertools для работы с итераторами
Модуль itertools
предоставляет эффективные функции для работы с итераторами.
import itertools
# Медленный способ
result = [x + y for x in range(1000) for y in range(1000)]
# Быстрый способ
result = itertools.product(range(1000), repeat=2)
10. Профилирование и оптимизация кода
Использование профилировщика для поиска узких мест в коде помогает определить, что именно нужно оптимизировать.
import cProfile
import pstats
def main():
# Ваш код здесь
pass
cProfile.run('main()', 'restats')
p = pstats.Stats('restats')
p.sort_stats('cumulative').print_stats(10)
Эти примеры и советы помогут вам значительно ускорить выполнение вашего Python-кода. Помните, что не все оптимизации подходят для каждой задачи, поэтому всегда профилируйте и тестируйте свои изменения.