Можно ли опустить Optional, если я установил значение по умолчанию на None?
Проблема с аннотацией типов в Python: Optional[int] vs int = None
Я столкнулся с проблемой при использовании аннотации типов в Python. У меня есть функция, которая выглядит следующим образом:
def foo(bar: int = None):
pass
Когда я проверяю тип/аннотацию параметра bar
, PyCharm сообщает мне, что он имеет тип Optional[int]
. Это вызывает у меня некоторые сомнения.
Мне кажется, что запись bar: int = None
выглядит гораздо чище по сравнению с bar: Optional[int] = None
, особенно когда у вас есть много параметров (больше 10). Поэтому у меня возникает вопрос: могу ли я просто опустить Optional
? Будут ли такие инструменты, как mypy или другие линтеры, отмечать это как ошибку?
На первую очередь, похоже, что сама Python не одобряет отсутствие Optional
, так как я провел следующий эксперимент:
from typing import Optional
from inspect import signature
def foo(a: int = None): pass
def bar(a: Optional[int] = None): pass
signature(foo).parameters['a'].annotation # возвращает int
signature(bar).parameters['a'].annotation # возвращает typing.Union[int, NoneType]
Здесь можно видеть, что аннотация параметра функции foo
возвращает просто int
, а для bar
возвращается тип Union[int, NoneType]
.
Таким образом, какова правильная практика: имеет ли смысл опускать Optional
в аннотациях, и будет ли это вызвано как ошибка линтерами?
Как указать несколько типов возвращаемых значений с помощью аннотаций типов
Как задать тип возвращаемого значения функции, зависящий от типа входного аргумента?
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата
Почему statistics.mean() работает так медленно?