Эффективные и не эффективные методы кодинга на Python |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-12-02 16:03 Предлагаю Вашему вниманию перевод статьи Good and Bad Practices of Coding in Python автора Duomly. Python – высокоуровневый язык программирования, акцентирующий внимание на удобочитаемости. Он разрабатывается, поддерживается и часто используется в соответствии с The Zen of Python или PEP 20. В этой статье показано несколько примеров хороших и плохих методов кодинга в Python, с которыми вы, вероятно, столкнетесь. Использование распаковки (Unpacking) для написания компактного кода Упаковка и распаковка — мощные инструменты Python. Вы можете использовать распаковку для присваивания значений переменным:
Вы можете использовать это для написания, возможно, самого компактного кода, меняющего значения переменных местами
Это потрясающе! Распаковка также может быть использована для присвоения значения нескольким переменным в более сложных случаях. Например, Вы можете написать так:
Но вместо этого Вы также можете воспользоваться более лаконичным и, возможно, более читабельным способом:
Это круто, правда? Но можно написать еще круче:
Фишка в том, что переменная с * собирает значения, не назначенные другим переменным. Использование цепочки (Chaining) для написания компактного кода Python позволяет использовать цепочки операторов сравнения. Таким образом, Вам не нужно проверять, являются ли два или более сравнения истинными:
Вместо этого Вы можете использовать более компактную форму написания:
Python также поддерживает присваивание значений переменным в виде цепочки. Итак, если Вы хотите присвоить одно и то же значение нескольким переменным одновременно, Вы можете сделать это простым способом:
Более компактный способ — использовать распаковку:
Тем не менее, все выглядит ещё круче, если использовать присвоение значения цепочкой:
Будьте осторожны, когда значения разные! Все переменные ссылаются на одно и то же значение. Проверка на None None не является уникальным объектом в Python. Он имеет аналоги, например, null в C-подобных языках.
Однако, предпочтительнее использование is и is not:
Кроме того, лучше использовать конструкцию x is not None, а не менее читабельную альтернативу (x is None). Перебор последовательностей (Sequences) и отображений (Mappings) Вы можете реализовать циклы в Python несколькими способами. Python предлагает несколько встроенных классов для упрощения их реализации.
Однако для этого есть лучший способ:
Но что, если Вы хотите запустить цикл в обратном порядке? Конечно, снова можно использовать диапазон:
Но «перевернуть» последовательность – более компактный способ:
Pythonic способ заключается в использовании обратной последовательности, чтобы получить цикл, который будет возвращать элементы последовательности в обратном порядке:
Иногда необходимы как элементы последовательности, так и соответствующие им индексы:
Лучше использовать перечисление, чтобы получить другой цикл, который возвращает значения индексов и элементов:
Это круто. Но что, если необходимо перебрать две или более последовательности? Конечно, можно снова использовать диапазон:
В этом случае Python также предлагает лучший способ решения. Вы можете применить zip:
Можно также скомбинировать этот метод с распаковкой:
Пожалуйста, имейте в виду, что диапазон может быть весьма полезным. Тем не менее, есть случаи (как, например, выше), где оптимальнее использовать альтернативы. Перебор словаря дает его ключи:
Однако вы можете применить метод .items () и получить ключи и соответствующие им значения:
Можно также использовать методы .keys () и .values ??() для перебора ключей и значений соответственно. Сравнение с нулем Когда у Вас есть числовые данные, и нужно проверить, равны ли числа нулю, можно (но не всегда нужно) использовать операторы сравнения == и !=:
Способ, предлагаемый Python, состоит в том, чтобы интерпретировать нуль как False, а все другие числа как True:
Имея это в виду, Вы можете использовать if item вместо if item! = 0:
Вы можете следовать той же логике и использовать if not item вместо if item == 0. Избегание изменяемых необязательных аргументов У Python очень гибкая система предоставления аргументов функциям и методам. Необязательные аргументы являются частью этого. Но будьте осторожны: Вы обычно не хотите использовать изменяемые необязательные аргументы. Рассмотрим следующий пример:
На первый взгляд это выглядит так, если вы не укажете seq, f () добавляет value в пустой список и возвращает что-то вроде [value]:
Выглядит здорово, правда? Нет! Рассмотрим следующие примеры:
Удивлены? Если да, то не Вы одни. Кажется, что каждый раз, когда вызывается функция, предоставляется один и тот же экземпляр необязательного аргумента (в данном случае, списка). Может быть, иногда это и будет то, что Вам нужно. Тем не менее, гораздо более вероятно, что Вам необходимо будет избежать это. Один из способов заключается в следующем:
Версия покомпактней:
Теперь мы получаем другой вывод:
В большинстве случаев это то, что нужно. Избегание классических Getter и Setter Python позволяет определять методы getter и setter так же, как C ++ и Java:
Вот как Вы можете использовать их:
В некоторых случаях это лучший способ. Однако часто лучше использовать свойства, особенно в простых случаях:
Свойства считаются более Pythonic, чем классические геттеры и сеттеры. Вы можете использовать их так же, как в C#, то есть так же, как обычные атрибуты данных:
Так что, в общем, лучше использовать свойства, когда это возможно. Избегание доступа к защищенным членам класса В Python отсутствуют как таковые private члены класса. Однако, если в начале названия элемента написать (_), то доступ к его изменению за пределами класса будет запрещен.
Экземпляры класса C имеют три элемента данных: .x, .y и ._Cz. Если имя участника начинается с двойного подчеркивания (dunder), оно становится измененным. Вот почему вместо ._z элемент ._Cz. Теперь можно доступ или изменить напрямую .x:
Вы также можете получить доступ или изменить ._y вне его класса, но это считается моветоном:
Вы не можете получить доступ к .z, потому что переменная изменена, но вы можете получить доступ или изменить ._Cz:
Вы должны избегать этого. Автор класса, вероятно, начинает имена с подчеркивания, чтобы подчеркнуть то, что лучше не использовать данный элемент вне его класса. Использование контекстных менеджеров (Context Managers) для освобождения ресурсов Иногда требуется написать код для правильного управления ресурсами. Это часто бывает при работе с файлами, подключениями к базам данных или другими объектами с неуправляемыми ресурсами. Например, вы можете открыть файл и обработать его:
Чтобы правильно управлять памятью, Вам необходимо закрыть этот файл после завершения работы:
Делать это таким способом лучше, чем не делать вовсе. Но что, если во время обработки Вашего файла возникает исключение? Тогда my_file.close () никогда не выполняется. Можно справиться с этим с помощью обработки исключений или с помощью контекстных менеджеров. Второй способ означает, что вы помещаете свой код в блок with:
Использование блока with означает, что специальные методы .enter () и .exit () вызываются даже в случаях исключений. Эти методы должны заботиться о ресурсах. Вы можете добиться особенно надежных конструкций, комбинируя контекстные менеджеры и обработку исключений. Стилистические советы Код Python должен быть элегантным, лаконичным и читабельным. Выводы Эта статья дает несколько советов о том, как написать более компактный, читабельный код. Короче говоря, она показывает, как сделать код более Pythonic. Кроме того, PEP 8 предоставляет Style Guide for Python Code, а PEP 20 представляет принципы языка Python. Источник: habr.com Комментарии: |
|