Skip to content

Latest commit

 

History

History
71 lines (56 loc) · 4.37 KB

Коллекции_и_их_типизация.md

File metadata and controls

71 lines (56 loc) · 4.37 KB

1.3 Коллекции и их типизация:

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

list, tuple, dict, set: работа с коллекциями

Python предлагает следующие встроенные типы коллекций:

  • list: Упорядоченный изменяемый набор элементов. 
        *  Пример: [1, 2, 3, "hello"]
  • tuple:  Упорядоченный неизменяемый набор элементов. 
        * Пример: (1, 2, "hello", True)
  • dict: Набор пар "ключ-значение", где ключи должны быть уникальными и неизменяемыми. 
        * Пример: {"name": "Alice", "age": 30}
  • set: Неупорядоченный набор уникальных элементов. 
        * Пример: {1, 2, 3, 3} (дубликаты игнорируются)

Типизация коллекций: List[int], Tuple[str, int], Dict[str, float]

Для типизации коллекций используются  дженерики  (generics) - специальные типы, которые параметризуются другими типами.  В Python дженерики представляются в виде квадратных скобок после имени типа.

Примеры:

  • List[int]: список целых чисел.
  • Tuple[str, int]: кортеж, содержащий строку и целое число.
  • Dict[str, float]: словарь, где ключи - строки, а значения - числа с плавающей точкой.
  • Set[bool]: множество логических значений.

numbers: List[int] = [1, 2, 3]
person: Tuple[str, int] = ("Bob", 25)
prices: Dict[str, float] = {"apple": 0.99, "banana": 1.25}
active_users: Set[bool] = {True, False}

Генераторы и итераторы: типизация и особенности

Генераторы  - это функции, которые используют оператор yield для возврата последовательности значений.  Итераторы  - это объекты, которые реализуют метод __next__, позволяющий получать следующий элемент последовательности.

Типизация генераторов и итераторов использует специальные типы:

  • Iterator[T]: итератор, возвращающий значения типа T.
  • Iterable[T]: объект, по которому можно итерироваться, возвращая значения типа T.
  • Generator[T, R, S]: генератор, который возвращает значения типа T, принимает значения типа R  и возвращает финальное значение типа S (необязательно).
from typing import Iterator, Iterable, Generator  
  
def even_numbers(n: int) -> Iterator[int]:  
  for i in range(n):  
    if i % 2 == 0:  
      yield i  
  
numbers: Iterable[int] = even_numbers(10)  
  
def my_generator(start: int, end: int) -> Generator[int, None, int]:  
  total = 0  
  for i in range(start, end):  
    total += i  
    yield i  
  return total  
  
result: int = my_generator(1, 5)  

Important

При использовании  Generator  необязательно указывать все три типа. Если  генератор не принимает значений или не возвращает финальное значение, можно использовать  None.