Как создавать пользовательские общие типы в Python (50/100 дней Python)

RedDeveloper
20.02.2023 11:30
Как создавать пользовательские общие типы в Python (50/100 дней Python)

Помимо встроенных типов, модуль типизации в Python предоставляет возможность определения общих типов, что позволяет вам определять типы, которые могут работать со значениями любого типа данных. Это полезно, когда вы хотите написать функции, которые могут работать со значениями различных типов безопасным для типов способом.

Чтобы определить общий тип, необходимо использовать класс TypeVar, определенный в модуле типизации:

from typing import TypeVar

T = TypeVar('T')

Где T - имя переменной типа, которое может быть любой строкой.

Использование общих типов

Общие типы можно использовать так же, как и встроенные типы, включая их в сигнатуры функций. Например, вот функция, которая принимает список значений и возвращает первое значение:

from typing import TypeVar

T = TypeVar('T')

def first(values: list[T]) -> T:
    return values[0]

Например, общий тип T используется для определения типа значений в списке, поэтому функция может работать со списками значений любого типа.

Вы также можете использовать общие типы с другими подсказками типов, такими как Union:

from typing import TypeVar, Union

T = TypeVar('T')


def find(values: list[T], target: T) -> Union[T, None]:
    for value in values:
        if value == target:
            return value
    return None

Или еще лучше: In th

from typing import TypeVar

T = TypeVar('T')


def find(values: list[T], target: T) -> T | None:
    for value in values:
        if value == target:
            return value
    return None

В этом примере функция find принимает список значений любого типа и целевое значение и возвращает первое значение в списке, совпадающее с целевым, или None, если совпадение не найдено.

Ограничение общих типов

общий тип может использоваться только с числовыми типами:В некоторых случаях вы можете захотеть ограничить типы, которые может принимать общий тип. Это можно сделать, указав ограничения типа. Например, вы можете захотеть убедиться, что

from typing import TypeVar

Numeric = TypeVar('Numeric', int, float)


def average(values: list[Numeric]) -> float:
    return sum(values) / len(values)

В этом примере тип Numeric определен как тип переменной, которая может быть только int или float. Это означает, что функцию average можно использовать только со списками значений типа int или float.

Что дальше?

Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов

31.03.2023 11:40

Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его обширная экосистема пакетов и стартовых наборов, которые делают создание веб-приложений более быстрым и эффективным. В этой статье мы рассмотрим лучшие...

Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?

31.03.2023 11:16

Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing

Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости

31.03.2023 11:06

Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить масштабируемость, производительность и безопасность вашего API. В этой статье мы рассмотрим несколько советов по созданию ресурсов API Laravel,...

Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS

31.03.2023 10:15

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

Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript

30.03.2023 14:11

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

Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python

30.03.2023 13:54

Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.