Как писать хороший код на python?🤔📄
✅Умение правильно и хорошо писать код — это важный навык для python-разработчика. Как научится писать хороший код — вы узнаете из сегодняшней статьи. Говоря о „хорошем коде“ имеется в виду большое количество факторов с которыми вам предстоит познакомиться, чтобы писать правильный и "конвейерный" код.
Возможно, самый известный сборник этих факторов Python был написан Тимом Питерсом, давний участник языка и его группы новостей comp.lang.python.
Этот сборник также известен под названием «The Zen of Python» и в нём изложены следующие факторы „хорошего кода“.
👉🏻 The Zen of Python, by Tim Peters 👈🏻
· Beautiful is better than ugly — Красивое — лучше, чем уродливое
· Explicit is better than implicit — Явное лучше, чем неявное.
· Simple is better than complex — Простое лучше, чем сложное.
· Complex is better than complicated - Сложное лучше, чем запутанное.
· Flat is better than nested - Плоский лучше, чем вложенный.
· Sparse is better than dense - Редкое лучше, чем частое.
· Readability counts - Читаемость имеет значение.
· Special cases aren't special enough to break the rules - Особых случаев недостаточно, чтобы нарушать правила.
· Although practicality beats purity - Хотя практичность лучше чистоты.
· Errors should never pass silently - Ошибки никогда не должны замалчиваться.
· Unless explicitly silenced — Если только они не замалчиваются явно.
· In the face of ambiguity, refuse the temptation to guess – Перед лицом двусмысленности откажитесь от соблазна угадать.
· There should be one -- and preferably only one -- obvious way to do it. – Должен быть один - и желательно только один - очевидный способ сделать это.
· Although that way may not be obvious at first unless you're Dutch – Хотя поначалу этот способ может быть не очевиден, если вы не голландец.
· Now is better than never – Лучше сейчас, чем никогда.
· Although never is often better than *right* now – Хотя никогда не бывает лучше, чем прямо сейчас.
· If the implementation is hard to explain, it's a bad idea – Если реализацию сложно объяснить, это плохая идея.
· If the implementation is easy to explain, it may be a good idea – Если реализацию легко объяснить, это может быть хорошей идеей.
· Namespaces are one honking great idea -- let's do more of those! – Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
✅Умение правильно и хорошо писать код — это важный навык для python-разработчика. Как научится писать хороший код — вы узнаете из сегодняшней статьи. Говоря о „хорошем коде“ имеется в виду большое количество факторов с которыми вам предстоит познакомиться, чтобы писать правильный и "конвейерный" код.
Возможно, самый известный сборник этих факторов Python был написан Тимом Питерсом, давний участник языка и его группы новостей comp.lang.python.
Этот сборник также известен под названием «The Zen of Python» и в нём изложены следующие факторы „хорошего кода“.
👉🏻 The Zen of Python, by Tim Peters 👈🏻
· Beautiful is better than ugly — Красивое — лучше, чем уродливое
· Explicit is better than implicit — Явное лучше, чем неявное.
· Simple is better than complex — Простое лучше, чем сложное.
· Complex is better than complicated - Сложное лучше, чем запутанное.
· Flat is better than nested - Плоский лучше, чем вложенный.
· Sparse is better than dense - Редкое лучше, чем частое.
· Readability counts - Читаемость имеет значение.
· Special cases aren't special enough to break the rules - Особых случаев недостаточно, чтобы нарушать правила.
· Although practicality beats purity - Хотя практичность лучше чистоты.
· Errors should never pass silently - Ошибки никогда не должны замалчиваться.
· Unless explicitly silenced — Если только они не замалчиваются явно.
· In the face of ambiguity, refuse the temptation to guess – Перед лицом двусмысленности откажитесь от соблазна угадать.
· There should be one -- and preferably only one -- obvious way to do it. – Должен быть один - и желательно только один - очевидный способ сделать это.
· Although that way may not be obvious at first unless you're Dutch – Хотя поначалу этот способ может быть не очевиден, если вы не голландец.
· Now is better than never – Лучше сейчас, чем никогда.
· Although never is often better than *right* now – Хотя никогда не бывает лучше, чем прямо сейчас.
· If the implementation is hard to explain, it's a bad idea – Если реализацию сложно объяснить, это плохая идея.
· If the implementation is easy to explain, it may be a good idea – Если реализацию легко объяснить, это может быть хорошей идеей.
· Namespaces are one honking great idea -- let's do more of those! – Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
import this
После чего вы получите данный список.***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
❤1
⚡️ DeepCode — открытая AI-платформа для автоматической генерации кода.
DeepCode превращает научные статьи и технические документы в готовые проекты, включая фронтенд, бэкенд и полноценные репозитории.
🔹 Основные возможности:
• Paper2Code — реализация идей из исследований в рабочий код
• Text2Web — генерация интерфейсов по описанию
• Text2Backend — автоматическое создание масштабируемых серверов
• Поддержка длинных документов и многофайловых проектов
🔜 В ближайшее время разработчики обещают:
• Автоматическую проверку и валидацию кода
• Повышение скорости генерации
• Улучшенную работу с требованиями
• Бенчмарки воспроизведения научных статей (PaperBench)
Проект полностью open source: https://github.com/HKUDS/DeepCode
DeepCode превращает научные статьи и технические документы в готовые проекты, включая фронтенд, бэкенд и полноценные репозитории.
🔹 Основные возможности:
• Paper2Code — реализация идей из исследований в рабочий код
• Text2Web — генерация интерфейсов по описанию
• Text2Backend — автоматическое создание масштабируемых серверов
• Поддержка длинных документов и многофайловых проектов
🔜 В ближайшее время разработчики обещают:
• Автоматическую проверку и валидацию кода
• Повышение скорости генерации
• Улучшенную работу с требованиями
• Бенчмарки воспроизведения научных статей (PaperBench)
Проект полностью open source: https://github.com/HKUDS/DeepCode
Использование контекстных менеджеров для работы с ресурсами
Контекстные менеджеры позволяют управлять ресурсами (например, файлами, соединениями с базами данных и т.д.) более безопасным и удобным способом, гарантируя, что ресурсы будут правильно закрыты после использования.
Использование контекстных менеджеров — это простой и эффективный способ повысить надежность и читаемость вашего кода.
Контекстные менеджеры позволяют управлять ресурсами (например, файлами, соединениями с базами данных и т.д.) более безопасным и удобным способом, гарантируя, что ресурсы будут правильно закрыты после использования.
Использование контекстных менеджеров — это простой и эффективный способ повысить надежность и читаемость вашего кода.
Использование executemany для массовых вставок данных
При работе с базами данных часто возникает необходимость вставить большое количество данных за один раз. Вместо того чтобы вызывать execute для каждой строки, можно использовать метод executemany, который позволит вставить несколько записей в одну операцию, что значительно ускорит процесс.
Использование executemany — это простой, но мощный способ ускорить взаимодействие с базой данных при работе с множеством записей!
При работе с базами данных часто возникает необходимость вставить большое количество данных за один раз. Вместо того чтобы вызывать execute для каждой строки, можно использовать метод executemany, который позволит вставить несколько записей в одну операцию, что значительно ускорит процесс.
Использование executemany — это простой, но мощный способ ускорить взаимодействие с базой данных при работе с множеством записей!
Библиотека setuptools
Библиотека
Библиотека
setuptools является инструментом для упрощения процесса создания, установки и распространения пакетов Python. Она используется в основном для упрощения установки и управления зависимостями Python-пакетов.
setuptools предоставляет функциональность для создания файлов setup.py, которые содержат информацию о вашем пакете, его зависимостях и других метаданных. Этот файл используется инструментами для установки пакетов, такими как pip.PySimpleGUI
PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.
PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.
PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
👍2👎1
Импортируем пакеты
Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.
1.
2.
3.
Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.
1.
import <package> — просто импорт.2.
from <package> import <obj> — «вытаскивает» obj (функция, класс, переменная) из пакета. Можно импортировать всё, если написать на место <obj> звёздочку.3.
import <package> as <name> — импортирует модуль и задаёт имя, записанное после as. Работает и с from <package> import <obj> as <name>. Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
👍1
Ищем жуков (bugs)
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
python3 -O foo.py.Экранирование
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (про multi-line строки пока не говорим ).
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
❤2
Немного про регулярные выражения
Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!
Недавно наткнулся на статью, где гений-разработчик с помощью f-строк в разы упрощает работу с регулярными выражениями.
Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!
Недавно наткнулся на статью, где гений-разработчик с помощью f-строк в разы упрощает работу с регулярными выражениями.
👍1
\b возвращает курсор вывода на один символ назад. А поскольку после него был ещё символ (a), то он просто перезаписался.Постараюсь интерактивно показать, | это курсор. Первым делом вывелось a|, потом, за счёт \b, стало так: |a, и в результате получили c|.
Кстати, все такие символы можно тут найти.
Тесты в документации
Такой подход интересен тем, что позволяет другому программисту понять как работает функция в определённых ситуациях, а вам — протестировать её работу.
Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).
Вы можете запускать тесты так же, как в примере, а можно с помощью терминала:
Такой подход интересен тем, что позволяет другому программисту понять как работает функция в определённых ситуациях, а вам — протестировать её работу.
Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).
Вы можете запускать тесты так же, как в примере, а можно с помощью терминала:
python -m doctest -v example.py.Правила документации
После идёт подробное объяснение. Кто он,
что он делает и какие параметры принимает.
Документировать можно в несколько абзацев.
Писать доки можно для всего: функции, класса, модуля.
можете почитать PEP257,
там разработчики рассказывают, как объяснять код.
class Post:
"""На первой строке краткое описание объекта. После идёт пустая строка (это обязательно).После идёт подробное объяснение. Кто он,
что он делает и какие параметры принимает.
Документировать можно в несколько абзацев.
Писать доки можно для всего: функции, класса, модуля.
можете почитать PEP257,
там разработчики рассказывают, как объяснять код.
"""👍3
Интерпретатор умный
Перед запуском он проходится по файлу и смотрит на первые значения переменных (
Именно поэтому, когда вы выполняете код в интерактивном интерпретаторе и как файл, результат может отличаться.
Перед запуском он проходится по файлу и смотрит на первые значения переменных (
a = "string"), которые потом подставляет на месте повторений (если это неизменяемые типы данных).Именно поэтому, когда вы выполняете код в интерактивном интерпретаторе и как файл, результат может отличаться.
👍1