Python Typing

Типизация

У каждого объекта в нашем (вашем) языке есть тип — так язык и мы понимаем с чем именно мы работаем

Виды типизации

Неявная vs Явная

Язык сам догадается или нужно обязательно помочь

# Python
a = "implicit"  # сам догадается

# Java
String a = "explicit";  # надо подсказать

Динамическая vs Статическая

Когда упадёт?

# python
a = "dynamic"
a / 2  # RuntimeError 

# Java
String a = "static"
a / 2  # Compile Error

Строгая vs Нестрогая

Когда упадёт?

# python
a = "strong"
print(2 + a)  # TypeError

# JS
a = "weak"
console.log(2 + a)  # 2weak

Утиная типизация

Кря-кря

То что крякает как утка, плавает как утка, ведёт себя как утка — утка.

 

Если мы делаем методы "как у числа", то мы можем работать с этим как с числом

 

Если мы делаем методы "как у итератора", то мы можем работать с этим как с итератором

Java vs Python

Явная строгая статическая

Java

Неявная строгая динамическая

(и утиная)

Python

Почему?

Типизация в Python

Java

Попишем на Java (я не умею)

public class API {
    public User getUser(int userId) {
        ...
    }
}

User user = API().getUser(123)

user.

Python

Попишем на python (я умею

class API:
    def get_user(self, user_id):
        ...


user = API().get_user(123)

user.???

Прям так и живетё?

Нет

История опциональной типизации

Python Enhancement Proposals 

Документы, предлагающие внесение изменение в язык и его экосистему

PEP-3107

2006 год

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

Ура!

def my_func(b: "can be optional") -> "ohoho TODO":
    ...

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

Ладно на самом деле ура

def my_func(b: int) -> str:
    ...

PEP-484

2014 год

Модуль typing и ТИПИЗАЦИЯ

Ну наконец-то

from typing import Union, Optional

def my_func(b: Union[int, float]) -> Optional[str]:
    ...

my_func("aaa")  # Mypy checker

PEP-526

2016 год

Аннотация переменных

Не хватало

user_id: int = 58
user: User = API().get_user(user_id)

В питоне опциональная статическая типизация!

Нет

mypy

mypy

Тайп-чекер, который использует аннотации в вашем коде и выдаёт ошибку, если что-то не так:

  • Существует только не в рантайме
  • Работает опционально :)
  • Активно развивается
  • Медленный 

В питоне можно писать  типо-безопасный код!

Нет

Выводы

Гибкость языка это круто

если это не javascript

Конец?

Нет

Cindicator — круто

у нас всё типизировано
(и есть вакансия стажёра-аналитика)

PiterPy Meetup — круто

мы делаем интересные митапы про разработку

(приходите, у нас джависты выступают)

Бонч-хакатон — круто

приходите, если есть желание с увлечением провести выходные

РИТ — круто

промокод, дающий скидку в 75%  Academic{PiterPyMeetup} 

Теперь да

[polytech] Python Typing

By b0g3r

[polytech] Python Typing

  • 120