Присвоить тип переменной python

Переменные в Питоне

На курсе «Программирование на Питоне» мы во многом продолжим изучать то, о чем узнали на вводном курсе, но на гораздо более детальном уровне. И начнем мы этот путь с того, что еще раз взглянем на переменные в Питоне.

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

Как объявить переменную в Питоне

Создание или объявление переменной в Питоне происходит в тот момент, когда вы присваиваете ей определенное значение. Это очень удобно. Заранее объявлять переменную не требуется.

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

Помимо этого, список можно «распаковать» (unpack) в несколько переменных:

Автоматическое определение типа данных

При создании и записи данных в переменную Питон попытается автоматически определить тип этих данных. Приведем несколько примеров:

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

Как узнать тип переменной в Питоне

В случае, если вы не уверены в том, к какому типу данных относится переменная, можно воспользоваться функцией type().

Читайте также:  Open image using python

Присвоение и преобразование типа данных

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

Также тип данных можно изменить.

Возможно, вы спрашиваете себя зачем инженеру машинного обучения в таких деталях разбираться в типах переменных. Одним из наиболее очевидных применений является предварительная обработка данных, поступивших, скажем, в формате строки (str), хотя с точки зрения логики это должно быть целое число (int).

Именование переменных

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

Как я не устаю повторять, название переменных должно быть осознанным. Это упростит работу с длинным кодом.

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

Источник

Присвоить тип переменной python

Аннотация функций

Синтаксис аннотации переменных работает и для параметров функций. Однако, чтобы указать тип возврата ( return ), мы добавляем стрелку –> , за которой следует его тип.

from typing import Dict, List def convert_celcius_to_fahrenheit(celcius_temp: float) –> float: return (celcius_temp * 9/5) + 32 def send_email(subject: str, body: str, recipients: List[str], cache: Dict[str, str]) –> bool: # пропущено для краткости return True # или False 

Использование специальных типов

Итак, когда мы разогрелись и познакомились с синтаксисом аннотаций типов, давайте познакомимся с более сложными типами.

Any

Переменная типа Any является неограниченной. Поэтому такие переменные совместимы со всеми другими типами ( int , str , List и т. д.), а все остальные типы совместимы с ними.

from typing import Any result: Any = "SUCCESS" # также работает, потому что переменные типа Any совместимы с другими типами result = 10 state: str = "PENDING" # работает, потому что все остальные типы совместимы с типом Any. state = result 

Literal

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

from typing import Literal GENDER = Literal["male", "female", "non–conforming"] def create_user(first_name: str, last_name: str, gender: GENDER) –> dict[str, str, GENDER]: return create_user("John", "Bond", "male") 

В вышеприведенном примере пол будет одним из значений литерального объявления GENDER – «мужской», «женский» или «non–conforming».

Union

Иногда переменная может обладать свойствами, охватывающими два объявленных типа. Переменная также может быть двух типов.

from typing import Union def get_room_temperature() –> Union[int, float]: return 20.8 # 20 тоже сработает 

TypedDict

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

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

from typing import TypedDict, Union class Card(TypedDict): rank: Union[str, int] suit: str # класс Card теперь имеет поведение обоих классов TypedDict и dict # Card может быть использован для аннотации переменной ace_of_spade: Card = # или может быть инстанцирован ace_of_spade = Card(rank='A', suit='♤') 

NoReturn

Тип NoReturn аналогичен типу void в других языках программирования. Он используется для объявления того, что функция не имеет возврата.

from typing import NoReturn def say_greeting() –> NoReturn: print("Hello World!") 

Final

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

from typing import Final MIN_NAME_LENGTH: Final = 2 # выдаст ошибку, зафиксированную системой проверки типов MIN_NAME_LENGTH += 1 class Validator(object): MIN_NAME_LENGTH: Final[int] = 4 class UserValidator(Validator): # эта строка будет отмечена интерпретатором MIN_NAME_LENGTH = 3 

Использование статической проверки типов в Python

Интерпретатор Python по умолчанию не осуществляет проверку типов. Однако была создана версия интерпретатора Python – mypy , которая обеспечивает проверку типов на уровне интерпретатора.

Вы можете использовать mypy двумя способами:

  1. Загрузить командную строку mypy и использовать ее для запуска ваших скриптов Python.
  2. Установить расширение mypy , доступное в VSCode и PyCharm.

Лучшие практики аннотации типов

1. Использование типа Any

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

2. Включите статическую проверку типов

Преимущества проверки типов, заключающиеся в предотвращении ошибок и помощи разработчику, будут не так ощутимы, если она будет динамической. Если вы не любите командную строку mypy , вы также можете установить его как расширение VSCode или PyCharm.

3. Используйте кортежи для массивов фиксированной длины

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

4. Типы возврата функций

Функции должны выполнять одно и только одно действие, поэтому они должны иметь один определенный тип.

В этой статье мы научились:

  1. Синтаксису аннотации типов, а также аннотации переменных и функций.
  2. Как использовать сложные конструкции типизации ( Any , Literal , Union , TypedDict , NoReturn , Final ).
  3. Как можно обеспечить проверку типов на уровне интерпретатора Python.
  4. Лучшим практикам аннотации типов и как внедрить проверку типов Python в свой проект.

Материалы по теме

Источники

Источник

Оцените статью