Три можливості Python 3 що рідко використовуються і про які повинен знати кожен

Три можливості Python 3 що рідко використовуються і про які повинен знати кожен
4 хв. читання
14 серпня 2020

Python 3 існує вже якийсь час і досить багато розробників, особливо ті, хто тільки починає свій шлях в Python, вже користуються цією версією мови. Попри те, що безліч нових можливостей широко використовуються, схоже, що деякі залишилися за кадром. У цій статті я розповім про три найменш відомі, але корисні, можливості. Я знаю про них з інших мов і вони роблять Python 3 кращим.

Перерахування

Перерахування я багато використовував в Java і Swift, і також почав їх використовувати в Python.

Оголошення перерахування в Python дуже просто зробити, і це було можливо і до третьої версії (хоча і з обмеженнями):

from enum import Enum

class State(Enum):
  AIR = 0
  LAND = 1
  SEA = 2
  
myState = State.AIR

# Prints 0
print(myState.value)
# Prints AIR
print(myState.name)

У коді вище, перерахування вводиться шляхом оголошення класу, успадкованого від Enum. А далі просто описуються всі потрібні стану. У моєму випадку: AIRLANDі 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 = 'Brett'
blog_title = 'Medium'

# Hi, my name is Brett and I am writing on my Medium blog.
a = "Hi, my name is {} and I am writing on my {} blog.".format(name, blog_title)

Легко помітити порожні фігурні дужки всередині рядка і після список з назвами змінних в певному порядку.

Тепер подивимося на той самий код, але з використанням fstring- читабельніший і дуже схожий на спосіб форматування у Swift.

name = 'Brett'
blog_title = 'Medium'

# Hi, my name is Brett and I am writing on my Medium blog.
a = f"Hi, my name is {name} and I am writing on my {blog_title} blog."

Щоб отримати такий акуратний рядок, потрібно всього лише помістити букву fперед лапками, і потім замість порожніх дужок можна відразу писати назви змінних або дані прямо в рядку. Оскільки змінні пишуться прямо в рядку, нема потреби вважати кількість елементів і стежити в якому порядку розташовувати змінні в кінці. Вони просто знаходяться відразу там, де потрібні їхні значення.

Використання fstringдає читабельніший і простіший в підтримці код, ніж використання класичних підходів.

Класи даних

Класи даних можуть бути незрозумілішою темою, ніж попередні, тому потребують трохи більше пояснень. Класи даних - це щось, що мені дуже сподобалося в мові Kotlin, тому я люблю їх використовувати також і в Python.

Клас даних - це клас, єдина мета якого зберігати дані. Клас містить змінні, які можна читати й писати, але не має ніякої додаткової логіки.

Уявіть, що у вас є програма, в якій вам потрібно передавати рядок і масив чисел між різними класами. У вас можуть бути методи на кшталт pass(str, arr), але набагато зручніше зробити клас, який містить рядок і масив в якості єдиних членів класу.

Використання класу даних краще показує що ви намагаєтеся зробити і також спрощує створення модульних тестів.

Приклад нижче показує простий клас даних, який являє собою тривимірний вектор, але він може бути легко розширений для подання будь-якої комбінації різних даних:

from dataclasses import dataclass

# Define dataclass 
@dataclass
class Vector3D:
    x: int
    y: int
    z: int
      
# Create a vector
u = Vector3D(1,1,-1)

# Outputs: Vector3D(x=1, y=1, z=-1)
print(u)

Тут легко помітити, що визначення класу даних дуже схоже на визначення звичайного класу, за винятком того, що використовується декоратор @dataclassі потім кожне поле визначається у вигляді имя: тип.

Хоча функціональність створеного Vector3D дуже обмежена, суть використання класу даних в тому, щоб підвищити ефективність і зменшити кількість помилок в коді. Адже набагато краще передавати як параметр Vector3D, ніж набір змінних типу int.

Більше інформації про декоратор @dataclassможна знайти в офіційній документації Python 3 .

Висновок

Дайте знати в коментарях, як вам ці можливості. Цікаво буде почути про нові сценарії їх використання. Вдалого кодування!

Джерело ENG: medium.com

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація