09.08.2020       Выпуск 346 (03.08.2020 - 09.08.2020)       Статьи

Три редко используемых возможности Python 3, о которых каждый должен знать

Python 3 существует уже какое-то время и довольно много разработчиков, особенно те, кто только начинает свой путь в Python, уже используют эту версию языка. Несмотря на то, что множество новых возможностей широко используются, похоже, что некоторые остались за кадром. В этой статье я расскажу о трех наименее известных, но полезных, возможностях. Я знаю о них из других языков и они делают Python 3 классным.

Читать>>




Экспериментальная функция:

Ниже вы видите текст статьи по ссылке. По нему можно быстро понять ссылка достойна прочтения или нет

Просим обратить внимание, что текст по ссылке и здесь может не совпадать.

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

.

Заключение

Дайте знать в комментариях, если вы попробовали эти новые возможности. Интересно будет услышать про новые сценарии их использования. Удачного кодирования!






Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus