Как оптимизировать свой код на Python, даже если вы новичок |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2025-07-18 11:44 Думаете, что вы слишком новичок, чтобы оптимизировать Python? Подумайте еще раз. Эти быстрые советы сделают оптимизацию простой и эффективной с самого начала. Давайте будем честными. Когда вы изучаете Python, вы, вероятно, не думаете о производительности. Вы просто пытаетесь заставить свой код работать! Но вот в чем дело: чтобы сделать свой код на Python быстрее, вам не нужно становиться опытным программистом в одночасье. 1. Замените циклы на списковые включения Давайте начнем с того, что вы, вероятно, делаете постоянно: создание новых списков путем преобразования существующих. Большинство новичков прибегают к циклу for, но у Python есть гораздо более быстрый способ сделать это. До оптимизации Вот как большинство новичков составили бы список чисел: Этот код создает пустой список с именем result, затем перебирает каждое число в нашем списке ввода, возводит его в квадрат и добавляет к списку результатов. Довольно просто, правда? После оптимизации Теперь давайте перепишем это с помощью спискового понимания: Эта единственная строка делает то же самое, что и наш цикл, но она говорит Python «создать список, где каждый элемент является квадратом соответствующего элемента в числах». Выпуск: Повышение производительности: Считывание списков обычно происходит на 30-50% быстрее, чем эквивалентные циклы. Улучшение более заметно при работе с очень большими итерируемыми объектами. Почему это работает? Списковые включения реализованы в C под капотом, поэтому они позволяют избежать многих накладных расходов, связанных с циклами Python, таких вещей, как поиск переменных и вызовы функций, которые происходят за кулисами. 2. Выберите правильную структуру данных для работы Это огромное, и это то, что может сделать ваш код в сотни раз быстрее с помощью всего лишь небольшого изменения. Ключевым моментом является понимание того, когда следует использовать списки, а когда наборы, а когда словари. До оптимизации Допустим, вы хотите найти общие элементы между двумя списками. Вот интуитивный подход: Этот код циклически перебирает первый список, и для каждого элемента он проверяет, существует ли этот элемент во втором списке, используя if item в . В чем проблема? Когда вы делаете элемент в , Python должен искать по всему второму списку, пока не найдет элемент. Это медленно! После оптимизации Вот та же логика, но с использованием набора для более быстрого поиска: Сначала мы преобразуем список в набор. Затем, вместо проверки наличия элемента в , мы проверяем наличие элемента в . Это крошечное изменение делает тестирование членства практически мгновенным. Выпуск: Повышение производительности: это может быть в 100 раз быстрее для больших наборов данных. Почему это работает? Наборы используют хеш-таблицы под капотом. Когда вы проверяете, находится ли элемент в наборе, Python не выполняет поиск по каждому элементу; Он использует хеш для прямого перехода к тому месту, где должен быть элемент. Это все равно, что иметь указатель книги вместо того, чтобы читать каждую страницу, чтобы найти то, что вы хотите. 3. По возможности используйте встроенные функции Python Python поставляется с множеством встроенных функций, которые в значительной степени оптимизированы. Прежде чем писать собственный цикл или пользовательскую функцию для выполнения чего-либо, проверьте, есть ли в Python уже функция для этого. До оптимизации Вот как вы могли бы рассчитать сумму и максимум списка, если бы не знали о встроенных функциях: Функция начинается с общего числа 0, а затем прибавляет каждое число к этому общему числу. Функция начинает с предположения, что первое число является максимальным, а затем сравнивает каждое второе число, чтобы увидеть, больше ли оно. После оптимизации Вот то же самое с использованием встроенных функций Python: Ну вот! Выдает общее количество всех чисел в списке и возвращает наибольшее число. Тот же результат, но гораздо быстрее. Выпуск: Повышение производительности: встроенные функции обычно выполняются быстрее, чем ручная реализация. Почему это работает? Встроенные функции Python написаны на C и сильно оптимизированы. 4. Выполнение эффективных операций со строками с помощью Join Конкатенация строк — это то, что делает каждый программист, но большинство новичков делают это способом, который становится экспоненциально медленнее по мере того, как строки становятся длиннее. До оптимизации Вот как можно создать строку CSV с помощью конкатенации с помощью оператора +: Этот код строит нашу строку CSV по частям. Для каждой строки он проходит по каждому элементу, преобразует его в строку и добавляет к нашему результату. Он добавляет запятые между элементами и переводы строк между строками. После оптимизации Вот тот же код с использованием метода join: Эта единственная линия делает многое! Внутренняя часть занимает каждую строку и соединяет все элементы запятыми. Внешняя часть берет все строки, разделенные запятыми, и соединяет их переводами строк. Выпуск: Повышение производительности: объединение строк происходит намного быстрее, чем конкатенация для больших строк. Почему это работает? Когда вы используете += для конкатенации строк, Python каждый раз создает новый строковый объект, поскольку строки являются неизменяемыми. С большими струнами это становится невероятно расточительным. Метод заранее определяет, сколько именно памяти ему нужно, и строит строку один раз. 5. Используйте генераторы для эффективной обработки данных Иногда вам не нужно хранить все данные в памяти сразу. Генераторы позволяют создавать данные по требованию, что может сэкономить огромное количество памяти. До оптимизации Вот как можно обработать большой набор данных, сохранив все в списке: Эта функция обрабатывает числа от 0 до n-1, применяет некоторые вычисления к каждому из них (возводя их в квадрат, умножая на 3 и прибавляя 42) и сохраняя все результаты в списке. Проблема в том, что мы храним все 100 000 обработанных значений в памяти одновременно. После оптимизации Вот такая же обработка с помощью генератора: Ключевое отличие в том, что вместо . Ключевое слово делает эту функцию генератором — она производит значения по одному, а не создает их все сразу. Выпуск: Повышение производительности: генераторы могут использовать «гораздо» меньше памяти для больших наборов данных. Почему это работает? Генераторы используют отложенную оценку, они вычисляют значения только тогда, когда вы их запрашиваете. Сам объект генератора крошечный; Он просто запоминает, где он находится в вычислениях. Заключение Оптимизация кода на Python не должна быть пугающей. Как мы уже видели, небольшие изменения в подходе к обычным задачам программирования могут привести к значительному увеличению скорости и использования памяти. Ключевым моментом является развитие интуиции для выбора правильного инструмента для каждой работы. Помните об этих основных принципах: используйте встроенные функции, когда они существуют, выбирайте подходящие структуры данных для вашего сценария использования, избегайте ненужной повторяющейся работы и внимательно следите за тем, как Python обрабатывает память. Включения списков, наборы для тестирования членства, объединение строк, генераторы для больших наборов данных — все это инструменты, которые должны быть в наборе инструментов каждого начинающего программиста Python. Продолжайте учиться, продолжайте программировать! Источник: www.kdnuggets.com Комментарии: |
|