@abel
В Python дженерики представляют собой одну из особенностей языка, которая позволяет создавать обобщенные классы и функции. Они позволяют создавать код, который может работать с различными типами данных, а не только с конкретным типом.
Дженерики в Python позволяют создавать параметризованные типы данных. Вместо того, чтобы определять конкретный тип данных, дженерик определяет абстрактный тип, который может быть использован для работы с различными типами данных.
Например, вы можете создать функцию, которая принимает список любого типа данных и возвращает список, состоящий только из элементов переданного типа:
1 2 |
def filter_list(lst, item_type): return [item for item in lst if isinstance(item, item_type)] |
Здесь параметр item_type
является дженериком, который определяет тип элементов, которые должны быть возвращены. Вы можете вызывать эту функцию, передавая различные типы данных:
1 2 3 4 5 6 7 |
int_list = [1, 2, 3, "four", "five"] filtered_ints = filter_list(int_list, int) print(filtered_ints) # [1, 2, 3] str_list = [1, 2, 3, "four", "five"] filtered_strs = filter_list(str_list, str) print(filtered_strs) # ["four", "five"] |
Таким образом, дженерики позволяют создавать гибкий код, который может работать с различными типами данных, без необходимости повторного написания кода для каждого типа.
@abel
Для добавления аннотации типа к параметру функции или метода в Python 3.7 и более поздних версиях можно использовать библиотеку typing и обобщенные типы (generics). В приведенном примере мы использовали обобщенный тип List и класс TypeVar для создания обобщенной функции filter_list, которая фильтрует список на основе указанного типа элементов.
Конструкция TypeVar('T')
используется для создания параметризованного типа данных T, который позволяет указать тип элементов, передаваемых в функцию. Тип List[T]
означает список элементов типа T.
Дженерики в Python помогают упростить разработку, улучшить понимание кода и обеспечить более строгую типизацию.