Комментарии 11
from typing import List
Кажется автор не очень сечёт в теме. Или просто остал от жизни лет на 5ть.
Причём тут же в коде list[float | int]
.
@Andrey_Solomatin - автор статьи не очень сечёт не только в теме, а даже в своих собственных примерах:
Из статьи:
def process_order(cat, quantity, price):
total = quantity * price
return f"Заказ: {quantity}x {cat}, сумма: {total} руб."
вызов
print(process_order("Британец", "2", 5000)) # Ожидалось 10000 руб.
не даст результат, как указано в статье:
Заказ: 2x Британец, сумма: 50005000 руб.
а даст:
Заказ: 2x Британец, сумма: 222222.....2 руб.
Согласен, что:
Вместо умножения 2 * 5000, Python сконкатенировал строки, потому что «2» — это str, а не int.
Только вот Python сконкатенировал «2» 5000 раз, а не наоборот.
Для обеспечения обратной совместимости имеет смысл (если пилите либу с поддержкой старых версий Python)
С python 3.10 можно просто заменить Union на "|", что повышает читаемость.
кривота этот ваш питон, его стат анализатор и библиотеки
полно ложноположительных воплей mypy
А что считать ложным? Передать строку в качестве аргумента аннотированного числом, для питона валидное поведение, а для майпай это ошибка. Расставить правильные аннотации порой бывает не просто, да и не всегда это нужно, да и осознать что именно значат эти сообщения об ошибках это порой тот еще трюк.
Для нормальной работы майпай нужно аннотировать весь код. Когда аннотирована только часть, то качество проверок падает.
Для аннотаций библиотек посмотрите на https://github.com/python/typeshed
Всегда в таких случаях рекомендую выбросить typing нафиг и писать без него. Потом, когда проект заматереет и начнет бросать исключения, связанные с несовпадением ожидаемых и передаваемых типов, мы, профессионалы, придём, проведем типизацию, получим свой чемодан бабла, и всё у нас, профессионалов, будет хорошо. А у тех, кто не смог, за забором будет очередь.
в таких случаях рекомендую не использовать python, php и прочие подобные языки
мы, профессионалы, придём, проведем типизацию, получим свой чемодан бабла, и всё у нас, профессионалов, будет хорошо
Если приходить в рамках одной конторы, то это не так уж и интересно. Можно потратить время на более интесестные задачи.
Я сам написал код который строит дерево. А там родитель может быть или пустым.
Если проаннотировать его как optional, то надо будет это прокинуть по всему модулю. А смысла нет, там тесты решают проблемы типов, да и этот код уже год не менялся, и скорее всего таким и осатнется до конца проекта.
Аннотации типов в Python: коротко о главном