Модуль typing у Python

Модуль typing у Python - це модуль, який дозволяє вказувати типи даних для змінних, аргументів функцій та значень, що повертаються. Він призначений для підтримки статичної типізації та покращення читабельності коду.

Ось деякі типи, методи та класи, які надає модуль typing, та приклади їх використання:

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

from typing import Any

def process_data(data: Any) -> None:

    print(data)

process_data(42)

process_data("Hello, world!")

Union: цей тип дозволяє вказати, що значення може бути одним з декількох типів. Наприклад:

Union[int, float]

означає, що значення може бути або цілим числом, або дійсним числом. Приклад використання:

from typing import Union

def add_numbers(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:

    return a + b

result = add_numbers(1, 2.5)

print(result)

Optional: цей тип використовується для вказівки на те, що значення може бути None, крім вказаного типу. Наприклад:

Optional[int]

означає, що значення може бути або цілим числом, або None. Приклад використання:

from typing import Optional

def find_index(numbers: List[int], target: int) -> Optional[int]:

    if target in numbers:

        return numbers.index(target)

    return None

index = find_index([1, 2, 3], 2)

print(index)

List, Tuple, Set, Dict: ці типи дозволяють вказувати типи елементів колекцій. Наприклад:

List[int]

означає список цілих чисел, а

Dict[str, int] 

означає словник, де ключі - рядки, а значення - цілі числа. Приклад використання:

from typing import List, Tuple, Set, Dict

def process_collections(numbers: List[int], coordinates: Tuple[float, float], names: Set[str], ages: Dict[str, int]) -> None:

    print(numbers)

    print(coordinates)

    print(names)

    print(ages)

process_collections([1, 2, 3], (1.0, 2.0), {"Alice", "Bob"}, {"Alice": 30, "Bob": 25})

Callable: цей тип використовується для вказівки на функції або методи. Він приймає два аргументи: список типів аргументів функції та тип значення, що повертається. Наприклад:

Callable[[int, int], int] 

означає функцію, яка приймає два цілих числа та повертає ціле число. Приклад використання:

from typing import Callable

def apply_function(func: Callable[[int, int], int], a: int, b: int) -> int:

    return func(a, b)

def add(a: int, b: int) -> int:

    return a + b

result = apply_function(add, 1, 2)

print(result)

TypeVar: цей тип дозволяє визначати власні типи змінних, які можуть бути використані для створення універсальних функцій або класів. Приклад використання:

from typing import TypeVar, List

T = TypeVar("T")

def reverse_list(items: List[T]) -> List[T]:

    return items[::-1]

reversed_integers = reverse_list([1, 2, 3])

reversed_strings = reverse_list(["a", "b", "c"])

print(reversed_integers)

print(reversed_strings)

NewType: цей тип дозволяє створювати нові типи даних на основі існуючих типів, але з різною семантикою. Наприклад, ви можете створити новий тип UserId на основі int, але з різною семантикою. Приклад використання:

from typing import NewType

UserId = NewType("UserId", int)

def get_user_name(user_id: UserId) -> str:

    return f"User {user_id}"

user_id = UserId(42)

print(get_user_name(user_id))

TypedDict: цей тип дозволяє вказувати типи значень для ключів словника. Наприклад:

TypedDict("Person", {"name": str, "age": int})

означає словник з ключами "name" та "age", де значення "name" - рядок, а значення "age" - ціле число. Приклад використання:

from typing import TypedDict

class Person(TypedDict):

    name: str

    age: int

def print_person(person: Person) -> None:

    print(f"{person['name']} is {person['age']} years old")

person: Person = {"name": "Alice", "age": 30}

print_person(person)

Protocol: цей тип дозволяє визначати протоколи, які можуть бути реалізовані класами. Протоколи визначають набір методів, які повинні бути реалізовані класом, що реалізує протокол. Приклад використання:

from typing import Protocol

class Drawable(Protocol):

    def draw(self) -> None:

        ...

class Circle:

    def draw(self) -> None:

        print("Drawing a circle")

def draw_shape(shape: Drawable) -> None:

    shape.draw()

circle = Circle()

draw_shape(circle)

Literal: цей тип дозволяє вказувати конкретні значення, які можуть бути прийняті або повернуті функцією. Наприклад:

Literal["red", "green", "blue"]

означає, що значення може бути одним з рядків "red", "green" або "blue". Приклад використання:

from typing import Literal

def print_color(color: Literal["red", "green", "blue"]) -> None:

    print(f"The color is {color}")

print_color("red")

Висновок


Модуль typing у Python дозволяє вказувати типи даних для змінних, аргументів функцій та значень, що повертаються, що полегшує розуміння коду та підтримку статичної типізації.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Д
Дмитро@dmytro2

2.2KПрочитань
4Автори
12Читачі
На Друкарні з 28 квітня

Більше від автора

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається