Как создавать пользовательские общие типы в 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.

Что дальше?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.