Пишем экологичный код на Python — охлаждаем планету. 8 советов
Выбросы заводов, сельское хозяйство и выхлопные газы конечно греют нашу планету, но вы когда-нибудь писали неоптимальный код? Тратили вычислительные ресурсы зря? Наш Python отдел подготовил несколько простых советов, которые помогут писать более чистый экологичный код и меньше греть планету.
Используйте профилировщики
Не забывайте время от времени запускать профилировщики, даже если вас «в принципе все устраивает». Они помогут найти места, требующие оптимизации.
Стандартом считается cProfile. Достаточно запустить
Используйте **, когда это действительно оправдано
Оператор возведения в степень ** имеет довольно общую логику — это нужно для работы с отрицательными и дробными степенями. Но если нужно возвести число в целочисленную степень, обычный цикл справится гораздо быстрее.
Сравните время работы:
и более быстрый вариант:
Не используйте + для создания длинных строк
В Python строка неизменяема, поэтому строки слева и справа от исходной будут скопированы в новую для каждой подобной пары конкатенации. Если у вас уже есть итерируемый объект, который нужно соединить, используйте join, он справится куда быстрее
Так что вместо:
используйте:
Используйте генераторы вместо циклов там, где это возможно
Помимо экономии памяти на длинных последовательностях, генераторы добавляют данные в список быстрее, чем это сделал бы append. Но не забывайте о читаемости кода, она не должна пострадать.
Вместо:
лучше написать:
Убедитесь, что сравниваете одинаковые типы
Операции сравнения на разных типах данных работают необычайно долго. Не верите? Сравните сами:
Используйте встроенные функции
Один из лучших способов ускорения кода — это встроенные функции Python. Они протестированы и оптимизированы. Так что в следующий раз, когда вам понадобится найти сумму последовательности, вместо привычного цикла:
сделайте так:
Предпочитайте локальное глобальному
Прописная истина Python — работа с глобальными переменными медленнее работы с локальными.
Это работает не только с переменными, но и вообще со всеми объектами, даже модулями. Конечно, импортировать локально плохой тон, но иногда же можно? ;)
Учите алгоритмы
Оптимальные решения типовых задач уже давно придумали, так что знание алгоритмов может помочь вам не делать лишних операций.
Например, для проверки числа на простоту не обязательно делать так:
достаточно цикла:
А как вы боретесь с экологией и оптимизируете свой код? Делитесь в комментариях. Также подписывайтесь на наш телеграм-канал «Голос Технократии». Каждое утро мы публикуем новостной дайджест из мира ИТ, а по вечерам делимся интересными и полезными мастридами.
Прикольно. Как замеряете скорость выполнения функций: пишите отдельную функцию?