Подсказки типов и проверка типов в Python (49/100 дней Python)

RedDeveloper
19.02.2023 13:32
Подсказки типов и проверка типов в Python (49/100 дней Python)

Python - динамически типизированный язык, что означает, что тип переменной определяется во время выполнения, а не во время объявления. Это может придать некоторую гибкость вашему коду, но также поднимает некоторые вопросы о том, как лучше работать с типами более надежным и эффективным способом.

Подсказки типов для переменных

Чтобы объявить тип переменной в Python, просто добавьте двоеточие, за которым следует тип, после имени переменной:

name: str = 'John Doe'
age: int = 30

Таким образом, если вы попытаетесь присвоить переменной значение другого типа, Python подскажет вам, что ожидался другой тип, сообщением типа Ожидался тип 'str', вместо него получен 'int'.

Подсказки типов для переменных необязательны, но они могут улучшить читаемость и сопровождаемость вашего кода.

Подсказки типов для функций

Синтаксис подсказок типов в функциях аналогичен синтаксису переменных, но подсказки типов необходимо включать в сигнатуру функции:

def repeat_message(message: str, times: int) -> str:
    return message * times

Здесь параметр message объявлен как тип str, а параметр times - как тип int. Тип возврата функции объявлен как str с помощью символа ->.

Подсказки типов для функций необязательны, но они могут облегчить понимание вашего кода, особенно при работе над большими проектами с большим количеством участников.

Подсказки типов для классов

Подсказки типов также можно использовать в классах, в том числе для переменных и методов класса:

class Person:
    name: str
    age: int

    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

    def say_hello(self) -> None:
        print(f'Hello, my name is {self.name}')

В этом примере переменные класса name и age объявлены с подсказками типа, а метод __init__ принимает параметры с подсказками типа. Метод say_hello также имеет подсказку типа возврата None. Это означает, что он ничего не возвращает. Подсказки типов для классов могут улучшить понимание кода и выявить ошибки на ранней стадии разработки.

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

Помимо основных типов, таких как str, int и float, вы также можете использовать общие типы в подсказках типов. Например, вы можете использовать список ints:

def sum_list(numbers: list[int]) -> int:
    return sum(numbers)


def count_words(words: list[str]) -> dict[str, int]:
    word_counts = {}
    for word in words:
        if word in word_counts:
            word_counts[word] += 1
        else:
            word_counts[word] = 1
    return word_counts

В этом примере функция sum_list принимает в качестве аргумента список[int] и возвращает int. Функция count_words принимает список[str] и возвращает dict[str, int], отображая слова на их частоту в списке.

Работа с модулем типизации

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

from typing import Union

def add(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
    return a + b

Однако в последних версиях Python лучшей альтернативой использованию типа Union является использование типа or oeprator |:

def add(a: int | float, b: int | float) -> int | float:
    return a + b

Функция d принимает два параметра, a и b, которые могут быть значениями int или float. Возвращаемое значение также может быть либо int, либо float.

Вы также можете использовать Optional, чтобы указать, что параметр является необязательным и может быть None:

from typing import Optional

def say_hello(name: str, age: Optional[int] = None) -> None:
    print(f'Hello, my name is {name}')
    if age is not None:
        print(f'I am {age} years old')

Аналогично, вы можете использовать оператор or | для указания того, что переменная также может быть None:В этом примере ad

def say_hello(name: str, age: int | None = None) -> None:
    print(f'Hello, my name is {name}')
    if age is not None:
        print(f'I am {age} years old')

В этом примере параметр age объявлен как тип int или None, что означает, что он может быть либо int, либо None. Значение по умолчанию - None, поэтому параметр необязателен.

Что дальше?

  • Практика: Курс по Python
  • Полная серия: 100 дней Python
  • Предыдущая тема: Множественное наследование в Python
  • Следующая тема: Скоро будет...
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?

05.05.2023 14:00

Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.

Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом

05.05.2023 11:59

Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря своим методам, они делают код очень простым для понимания и читабельным.

JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы

05.05.2023 11:57

Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний, то, не теряя времени, практикуйте наш бесплатный онлайн тест 1100+ JavaScript MCQs и развивайте свои навыки и знания.

Массив зависимостей в React
Массив зависимостей в React

05.05.2023 09:44

Все о массиве Dependency и его связи с useEffect.