Docstring. Аннотации..md 3.3 KB

Docstring - строка документирования.

Вызывается:

help(abs)
abs.__doc__

В языках со строгой типизация (Python) с объектами определенных типов можно производить только ограниченный набор действий.

~={magenta}В Python динамическая строгая типизация.=~

Аннотация типов в Python

numbers: list = []  # переменная numbers хранит список
languages: dict = {}  # переменная languages хранит словарь
temperature: tuple = (1, 2, 3)  # переменная temperature хранит кортеж
letters: set = set('hello')  # переменная letters хранит множество

Для указания нескольких типов данных можно использовать ~={magenta}Union=~

from typing import Union

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

param: int | float | str

Можно использовать ~={magenta}Optional=~. В данном случае указывается, что список может быть None.

from typing import Optional

num: Optional[int] = None
def append_to_list(value, my_list: Optional[list] = None):
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list

Объект ~={magenta}Any=~ указывает на любой тип данных.

from typing import Optional, Any, List

def append_to_list(value: Any, my_list: Optional[list] = None) -> List[Any]:
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list

Аннотация элементов кортежа

from typing import Tuple

# Кортеж может содержать элементы разных типов
words: Tuple[str, int] = ("hello", 300)

# Кортеж может содержать неизвестное количество элементов типа str
words: Tuple[str, ...] = ("hello", "world", '!')

Аннотация словарей
Здесь функция foo принимает один аргумент bar, он должен являться словарем, у которого ключи могут быть либо строкой либо целым числом, а значения могут быть либо пустыми (тип None) , либо строкой

from typing import Dict, Optional, Union

def foo(bar: Dict[Union[str, int], Optional[str]]) -> bool:
   return True

~={green}Аннотации в Python с версии 3.9=~


# Замена typing
word: list[str] = ['hello', 'world']
numbers: list[float] = [1.1, 3.0, 4.5]
letters: set[str] = set('hello')
digits: frozenset[int] = frozenset([1, 2, 2, 1])

# Замена Union
param: int | float | bool

# Замена Optional
param: int | None = None
word: str | None = None

# Аннотация словарей
person: dict[str, str] = { "first_name": "John", "last_name": "Doe"}

# Аннотация кортежей
words: tuple[str, int] = ("hello", 300)

#
def foo(bar: dict[str | int, str | None]) -> bool:
   return True