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
. А далі просто описуються всі потрібні стану. У моєму випадку: 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 = '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
Ще немає коментарів