Давайте я в ближайшие пару дней расскажу о свежих релизах в мире Python, которые мне показались важными. Начну с того, что pyflakes (он используется в flake8) теперь нормально работает с магией типизации, а конкретно:
Не отмечает импорты для аннотации переменных через комментарий как неиспользуемые. Например, если вы пишете
a = [] # type: List[str]
, то pyflakes теперь видит, чтоfrom typing import List
используется для этой аннотации. Без аннотации переменных mypy не работает. Нормальная аннотация в примере выше выглядит так:a: List[str] = []
. Такая модная аннотация появилась только в Python 3.6, но Python 3.5 официально поддерживается ещё полтора года. К слову, поддержка Python 3.4 заканчивается 16 марта.Не ругается на
@typing.overload
как переопределение функции.@overload
используется для обозначения зависимости типов выходных значений функции от входных (немножко generics). Например:
...
@overload
def decode(response: bytes) -> str:
...
def decode(response):
<actual implementation>```
В примере выше тип выходных значений `decode` зависит от входных: если передали `None`, то вернется тоже `None`, а если передали `bytes`, то на выходе будет `str`. Выглядит это ужасно громоздко, как и вся типизация в Python, но альтернатив в мире Python пока что нет.