[Python, Программирование] Три редко используемых возможности Python 3, о которых каждый должен знать (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Python 3 существует уже какое-то время и довольно много разработчиков, особенно те, кто только начинает свой путь в Python, уже используют эту версию языка. Несмотря на то, что множество новых возможностей широко используются, похоже, что некоторые остались за кадром. В этой статье я расскажу о трех наименее известных, но полезных, возможностях. Я знаю о них из других языков и они делают Python 3 классным.
Данная статья является переводом 3 Neglected Features in Python 3 That Everyone Should Be Using.
Перечисления
Перечисления я много использовал в Java и Swift. Продолжаю их использовать теперь и в Python.
Объявление перечисления в Python очень просто сделать и это было возможно и до третьей версии (хотя и с ограничениями):
from enum import Enum
class State(Enum):
AIR = 0
LAND = 1
SEA = 2
myState = State.AIR
# Выводит 0
print(myState.value)
# Выводит AIR
print(myState.name)
В коде выше перечисление вводится путем объявления класса, наследованного от Enum. А далее просто описываются все нужные состояния. В моем случае: AIR, LAND и SEA.
Функциональность, которая была добавлена в Python 3 — возможность использовать .value и .name. Они позволяют получить число и строку соответствующие перечислению.
Например, вывод значения State.LAND.name будет LAND.
Перечисления полезны в коде, когда вы хотите иметь некоторые текстовые идентификаторы для констант. Например, вместо сравнения состояния с 0 или 1 гораздо показательнее сравнивать с State.MOVING или State.STATIONARY. Константы могут меняться и если кто-то посмотрит код позже, то слово MOVING даст гораздо больше понимания, чем 0. В результате сильно повышается читабельность кода.
Больше информации можно найти в официальной документации Python 3 по Enum.
Форматирование
Добавленные в версии 3.6, fstrings — это мощное средство форматирования текста. Они позволяют создавать гораздо более читабельный и безошибочный код (чем я наслаждаюсь после перехода из Java). Это лучше, чем format, который использовался ранее в Python. Вот пример использования format:
name = 'Михаил'
blog_title = 'codeatcpp.com'
# Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com.
a = "Привет, меня зовут {} и я пишу в своем блоге {}.".format(name, blog_title)
Легко заметить пустые фигурные скобки внутри строки и после список с названиями переменных в определенном порядке.
Теперь посмотрим на такой же код, но с использованием fstring — более читабельный и очень похожий на способ форматирования в Swift.
name = 'Михаил'
blog_title = 'codeatcpp.com'
# Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com.
a = f"Привет, меня зовут {name} и я пишу в своем блоге {blog_title}."
Чтобы получить такую аккуратную строку, нужно всего лишь поместить букву f перед кавычками, и затем вместо пустых скобок можно сразу писать названия переменных или данные прямо в строке. Поскольку переменные пишутся прямо в строке, нет необходимости считать количество элементов и следить в каком порядке располагать переменные в конце. Они просто находятся сразу там, где нужны их значения.
Использование fstring дает более читабельный и более простой в поддержке код, чем использование классических подходов.
Классы данных
Классы данных может быть более непонятная тема, чем предыдущие, поэтому потребует чуть больше пояснений. Классы данных — это что-то, что мне очень понравилось в языке Kotlin, поэтому я люблю их использовать также и в Python.
Класс данных — это класс, единственная цель которого хранить данные. Класс содержит переменные, которые можно читать и писать, но не имеет никакой дополнительной логики.
Представьте, что у вас есть программа, в которой вам нужно передавать строку и массив чисел между разными классами. У вас могут быть методы вроде pass(str, arr), но гораздо удобнее сделать класс, который содержит строку и массив в качестве единственных членов класса.
Использование класса данных лучше показывает что вы пытаетесь сделать и также упрощает создание юнит-тестов.
Пример ниже показывает простой класс данных, который представляет собой трехмерный вектор, но он может быть легко расширен для представления любой комбинации различных данных:
from dataclasses import dataclass
# Определяем класс данных
@dataclass
class Vector3D:
x: int
y: int
z: int
# Создаем вектор
u = Vector3D(1,1,-1)
# Выводит: Vector3D(x=1, y=1, z=-1)
print(u)
Здесь легко заметить, что определение класса данных очень похоже на определение обычного класса, за исключением того, что используется декоратор @dataclass и затем каждое поле определяется в виде имя: тип.
Хотя функциональность созданного Vector3D сильно ограничена, суть использования класса данных в том, чтобы повысить эффективность и уменьшить количество ошибок в коде. Ведь гораздо лучше передавать в качестве параметра Vector3D, чем набор переменных типа int.
Больше информации про декоратор @dataclass можно найти в официальной документации Python 3.
Заключение
Дайте знать в комментариях, если вы попробовали эти новые возможности. Интересно будет услышать про новые сценарии их использования. Удачного кодирования!
===========
Источник:
habr.com
===========
===========
Автор оригинала: Brett Fazio
===========Похожие новости:
- [Java, Параллельное программирование] Анатомия backpressure в реактивных потоках
- [Python, Программирование] Как не потерять ход времени работая за компьютером. Приложение по мониторингу работы и введению статистики
- [Высокая производительность, C++, Алгоритмы, Параллельное программирование, GitHub] C++ template аллокатора с потокобезопасным циклическим буфером
- [Python, Проектирование и рефакторинг] Мониторинг демон на Asyncio + Dependency Injector — руководство по применению dependency injection
- [Программирование микроконтроллеров] Подключение OLED дисплея ssd1306 к STM32 (SPI+DMA)
- [Python, Django] Шесть Python-пакетов, которые рекомендуется использовать в каждом веб-приложении на Django (перевод)
- [API, Python] Реализация offline режима для Yandex.Music
- [Программирование, Системное программирование, Rust] В поиске вопросов, или как создать новый отладчик
- Facebook представил Pysa, статический анализатор для языка Python
- [Космонавтика, DIY или Сделай сам] Целимся и общаемся со спутниками: Часть первая — целимся программно
Теги для поиска: #_python, #_programmirovanie (Программирование), #_python3, #_nachinajuschim (начинающим), #_tips_and_tricks, #_metki_nikto_ne_chitaet (метки никто не читает), #_sovety_i_rekomendatsii (советы и рекомендации), #_programmirovanie (программирование), #_idei (идеи), #_python, #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:28
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Python 3 существует уже какое-то время и довольно много разработчиков, особенно те, кто только начинает свой путь в Python, уже используют эту версию языка. Несмотря на то, что множество новых возможностей широко используются, похоже, что некоторые остались за кадром. В этой статье я расскажу о трех наименее известных, но полезных, возможностях. Я знаю о них из других языков и они делают Python 3 классным. Данная статья является переводом 3 Neglected Features in Python 3 That Everyone Should Be Using. Перечисления Перечисления я много использовал в Java и Swift. Продолжаю их использовать теперь и в Python. Объявление перечисления в Python очень просто сделать и это было возможно и до третьей версии (хотя и с ограничениями): from enum import Enum
class State(Enum): AIR = 0 LAND = 1 SEA = 2 myState = State.AIR # Выводит 0 print(myState.value) # Выводит AIR print(myState.name) В коде выше перечисление вводится путем объявления класса, наследованного от Enum. А далее просто описываются все нужные состояния. В моем случае: AIR, LAND и SEA. Функциональность, которая была добавлена в Python 3 — возможность использовать .value и .name. Они позволяют получить число и строку соответствующие перечислению. Например, вывод значения State.LAND.name будет LAND. Перечисления полезны в коде, когда вы хотите иметь некоторые текстовые идентификаторы для констант. Например, вместо сравнения состояния с 0 или 1 гораздо показательнее сравнивать с State.MOVING или State.STATIONARY. Константы могут меняться и если кто-то посмотрит код позже, то слово MOVING даст гораздо больше понимания, чем 0. В результате сильно повышается читабельность кода. Больше информации можно найти в официальной документации Python 3 по Enum. Форматирование Добавленные в версии 3.6, fstrings — это мощное средство форматирования текста. Они позволяют создавать гораздо более читабельный и безошибочный код (чем я наслаждаюсь после перехода из Java). Это лучше, чем format, который использовался ранее в Python. Вот пример использования format: name = 'Михаил'
blog_title = 'codeatcpp.com' # Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com. a = "Привет, меня зовут {} и я пишу в своем блоге {}.".format(name, blog_title) Легко заметить пустые фигурные скобки внутри строки и после список с названиями переменных в определенном порядке. Теперь посмотрим на такой же код, но с использованием fstring — более читабельный и очень похожий на способ форматирования в Swift. name = 'Михаил'
blog_title = 'codeatcpp.com' # Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com. a = f"Привет, меня зовут {name} и я пишу в своем блоге {blog_title}." Чтобы получить такую аккуратную строку, нужно всего лишь поместить букву f перед кавычками, и затем вместо пустых скобок можно сразу писать названия переменных или данные прямо в строке. Поскольку переменные пишутся прямо в строке, нет необходимости считать количество элементов и следить в каком порядке располагать переменные в конце. Они просто находятся сразу там, где нужны их значения. Использование fstring дает более читабельный и более простой в поддержке код, чем использование классических подходов. Классы данных Классы данных может быть более непонятная тема, чем предыдущие, поэтому потребует чуть больше пояснений. Классы данных — это что-то, что мне очень понравилось в языке Kotlin, поэтому я люблю их использовать также и в Python. Класс данных — это класс, единственная цель которого хранить данные. Класс содержит переменные, которые можно читать и писать, но не имеет никакой дополнительной логики. Представьте, что у вас есть программа, в которой вам нужно передавать строку и массив чисел между разными классами. У вас могут быть методы вроде pass(str, arr), но гораздо удобнее сделать класс, который содержит строку и массив в качестве единственных членов класса. Использование класса данных лучше показывает что вы пытаетесь сделать и также упрощает создание юнит-тестов. Пример ниже показывает простой класс данных, который представляет собой трехмерный вектор, но он может быть легко расширен для представления любой комбинации различных данных: from dataclasses import dataclass
# Определяем класс данных @dataclass class Vector3D: x: int y: int z: int # Создаем вектор u = Vector3D(1,1,-1) # Выводит: Vector3D(x=1, y=1, z=-1) print(u) Здесь легко заметить, что определение класса данных очень похоже на определение обычного класса, за исключением того, что используется декоратор @dataclass и затем каждое поле определяется в виде имя: тип. Хотя функциональность созданного Vector3D сильно ограничена, суть использования класса данных в том, чтобы повысить эффективность и уменьшить количество ошибок в коде. Ведь гораздо лучше передавать в качестве параметра Vector3D, чем набор переменных типа int. Больше информации про декоратор @dataclass можно найти в официальной документации Python 3. Заключение Дайте знать в комментариях, если вы попробовали эти новые возможности. Интересно будет услышать про новые сценарии их использования. Удачного кодирования! =========== Источник: habr.com =========== =========== Автор оригинала: Brett Fazio ===========Похожие новости:
Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:28
Часовой пояс: UTC + 5