Объявление типов переменных python

№6 Присвоение типа переменной / Уроки по Python для начинающих

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

Преобразование в Python выполняется с использованием функций-конструкторов:

  • int() — создает целочисленное число из числового значения, либо значения с плавающей точкой (округляя его до предыдущего целого числа) или строкового значение (при условии, что данная строка является целым числом)
  • float() — так же создает число, но с плавающей точкой из целочисленного значения, значения с плавающей точкой или строкового (при условии, что строка представляет собой число с плавающей точкой или целое число)
  • str() — создает строку из многих типов данных, включая строки, целые числа и числа с плавающей точкой.

int(): пример преобразования

x = int(1) # x станет 1 y = int(2.8) # y станет 2 z = int("3") # z станет 3 

float(): пример преобразования

x = float(1) # x станет 1.0 y = float(2.8) # y станет 2.8 z = float("3") # z станет 3.0 w = float("4.2") # w станет 4.2 

str(): пример преобразования

x = str("s1") # x станет 's1' y = str(2) # y станет '2' z = str(3.0) # z станет '3.0' 

Источник

Объявление типов переменных 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 , которая обеспечивает проверку типов на уровне интерпретатора.

Читайте также:  Php curl failed connect to

Вы можете использовать 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 в свой проект.

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

Источники

Источник

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