4 совета как ЛУЧШЕ применять TypedDict в Python

  Рет қаралды 11,915

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Размещайте свои проекты на доступных серверах Vscale: slc.tl/0cf06
⭐ Телеграм канал: t.me/+4BVQJYsr8-o2OWNh
В данном видео рассмотрим главные минусы Python dict. Использование фишек из видео позволяет отслеживать типизацию Python словарей и обнаруживать ошибки в проектах еще на этапе написания кода.
Такой подход улучшает безопасность приложений и сокращает время его разработки.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Связаться со мной: zproger777@gmail.com
📁 Поддержать канал: github.com/Zproger/donate
📁 Исходный код: скоро
Тайм-коды:
0:00 - Какие есть недостатки у python dict?
2:23 - Недостатки с dict типизацией python
2:50 - 1. Как TypedDict решает все это?
3:43 - Интеграция Selectel
4:29 - 2. Как TypedDict делает код более явным?
5:29 - 3. Преимущества TypedDict над Python dict
7:58 - 4. Динамический код с TypedDict в Python

Пікірлер: 77
@BadekYO
@BadekYO 4 ай бұрын
Если есть возможность затащить в проект пайдантик зависимостью, то это, как по мне, будет куда удобнее и полезнее. Чисто для аннотации словарей, скорее всего, можно использовать TypedDict, но я практически не встречал его в каких-то популярных опенсорсных проектах, если нужна ванила, то отдал бы предпочтение датаклассам.
@krylovilya1
@krylovilya1 4 ай бұрын
Нужно сравнение TypedDict, NamedTuple, и Dataclass
@zproger
@zproger 4 ай бұрын
Благодарю за идею!
@sobolenkoyevgeni377
@sobolenkoyevgeni377 25 күн бұрын
И attrs
@molochnikzero
@molochnikzero 4 ай бұрын
Зачем добавлять в свой код строгую типизацию и потом костылями её обходить, если можно просто использовать для таких целей датаклассы, которые легче и проще? А в случаях, когда тебе действительно нужно валидировать json\xml\protobuf, то есть pydantic или marshmallow (для xml - xmltdict + что-то из вышесказанного), которые имеют для валидации больше возможностей
@zproger
@zproger 4 ай бұрын
Потому что датаклассы и TypedDict это совершенно разные вещи и нужны для разных ситуаций. Иногда нужен dataclass, иногда Enum, а иногда TypedDict, и не получится всегда применять одно и тоже.
@zproger
@zproger 4 ай бұрын
Вижу комментарий был изменен. Ну в целом если речь о pydantic, тогда да, но все же иногда проще сделать типизированный словарь. Все зависит от ситуации.
@egorkorotaev6848
@egorkorotaev6848 4 ай бұрын
например?@@zproger
@plathardstuck28
@plathardstuck28 4 ай бұрын
Наверное не стоит в принципе обращаться к словарю по ключу без .get()
@user-rf4fy7dp7b
@user-rf4fy7dp7b 4 ай бұрын
если строгую типизацию в коде приходиться обходить костылями, то речь идет уже не о коде
@al3kse190
@al3kse190 4 ай бұрын
какая музыка использовалась на заднем фоне в плейлисте про мультипроцессинг?
@zvd1660
@zvd1660 4 ай бұрын
И чем лучше датакласов тогда? Какое-то среднее нечто между датакласом и диктом
@user-eh8jh4cd2t
@user-eh8jh4cd2t 3 ай бұрын
Подскажите пожалуйста название темы, которая стоит у вас в PyCharm, эта комбинация цветов бесподобна 😍
@user-it3yo1sn6i
@user-it3yo1sn6i 4 ай бұрын
А такая аннотация подойдет? -> dict[Union[str, int], Any]
@shakapaker
@shakapaker 4 ай бұрын
У меня один вопрос, если я принимаю JSON с бэка то что мне нужно использовать?
@errores-me6yu
@errores-me6yu 4 ай бұрын
Привет, что за дистрибутив линукс у тебя стоит? как поставить такой же? чтобы внешний вид был такой, сверху оперативка, цпу градусы и %?
@zproger
@zproger 4 ай бұрын
Привет, будет видео на канале, еще не доделал оболочку
@errores-me6yu
@errores-me6yu 4 ай бұрын
@@zproger жду!!
@andynaz7044
@andynaz7044 3 ай бұрын
хорошо преподнёс, спасибо
@zproger
@zproger 3 ай бұрын
Благодарю
@yatagarashy1669
@yatagarashy1669 4 ай бұрын
как ты сделал такую красивую верхнюю шторку? где показывается кол-во рабочих столов, температура, цп и тд? и какой у тебя дистрибутив
@zproger
@zproger 4 ай бұрын
Это polybar, дистрибутив arch linux
@user-jh9vd1xo4g
@user-jh9vd1xo4g Ай бұрын
А что за IDE ты юзал в видеве?
@nikolayohanyan4606
@nikolayohanyan4606 4 ай бұрын
Привет . берётесь ли вы за написание индикаторов и соединения с криптобиржами на Питоне?
@zproger
@zproger 4 ай бұрын
На данный момент нет
@user-wn4nj6lq9q
@user-wn4nj6lq9q 4 ай бұрын
Интересно)
@zproger
@zproger 4 ай бұрын
Благодарю!
@agrima9845
@agrima9845 4 ай бұрын
Я только что искал информацию про словари, и пришло в тг уведомление о новом видео. И какая же тема? 😄 Совпадение?) Спасибо)
@zproger
@zproger 4 ай бұрын
:)))
@kuanishpobedin4463
@kuanishpobedin4463 4 ай бұрын
Используешь visual studio code? Или его опенсорс аналог?
@zproger
@zproger 4 ай бұрын
это Pycharm
@shakapaker
@shakapaker 4 ай бұрын
он же и так опенсурс?
@RimmieEkworg
@RimmieEkworg 4 ай бұрын
Бро это Arch ? какой wm используешь ?
@user-jd7rl1pl1m
@user-jd7rl1pl1m 4 ай бұрын
Arch
@restranger5014
@restranger5014 4 ай бұрын
Что у тебя за терминал? И что за шрифт в полибаре?
@zproger
@zproger 4 ай бұрын
Alacritty + JetBrains
@samezarus
@samezarus 4 ай бұрын
спасибо, не знал 😢
@zproger
@zproger 4 ай бұрын
Рад что был полезен
@Smbrine
@Smbrine 3 ай бұрын
ОРМка для словарей, гениально! xD
@aillapur
@aillapur 4 ай бұрын
А что если сразу использовать класс? 😌
@hophip2955
@hophip2955 4 ай бұрын
Может странный вопрос - зачем пользоваться ТАйпед Дикт если есть датаклассы?
@zproger
@zproger 4 ай бұрын
Иногда нужно использовать именно словари, но обычный dict плохо справляется в некоторых ситуациях (как показано в видео), и вот именно в таких случаях можно юзать TypedDict.
@hophip2955
@hophip2955 4 ай бұрын
Или например модели pydentic?
@hophip2955
@hophip2955 4 ай бұрын
@@zproger Имели ли вы когда нибудь такие кейсы, в каких случаях мможет такое случаться ?
@zproger
@zproger 4 ай бұрын
Да, когда нужно готовить четкие шаблоны для ответов в виде словарей. В таких случаях очень круто заранее описать возможные сценарии ответов и дать им типизацию. Когда это будет заполняться в других частях софта, то разработчик не пропустит необходимые ключи и укажет именно те типы данных, которые там необходимы.
@vryaboshapko
@vryaboshapko 4 ай бұрын
@@zproger то есть, TypedDict нужен как прослойка между, условно, легаси, работающем на словарях, и новым кодом? Просто новый код как раз проще написать сразу на дата классах или pydantic/attrs.
@user-xm6wi7cc9u
@user-xm6wi7cc9u 4 ай бұрын
а это работает быстрее обычных словарей? если да и скорость выполнения существенная то смысл есть иначе жопоболь
@zproger
@zproger 4 ай бұрын
Тут фишка немного в другом, по скорости это не будет работать быстрее, но если вы допустите ошибку с обычными словарями и с TypedDict, то на устранение потребуется разное время. И уже тут вы выиграете в скорости за счет удобства работы с типизированным словарем.
@user-xm6wi7cc9u
@user-xm6wi7cc9u 4 ай бұрын
@@zproger это смотря какая задача. В своих проектах я обычно упираюсь в скорость выполнения.
@ankhmarcius8331
@ankhmarcius8331 4 ай бұрын
точно pydantic, пару недель назад смотрел как подобным способом проверяли валидность приходящих данных для FastAPI
@user-fi8zc9ph3o
@user-fi8zc9ph3o 4 ай бұрын
Сделай видео о том, как ты настроил vs code и linux, выглядит очень классно))
@zproger
@zproger 4 ай бұрын
Это дефолтный PyCharm. Про линукс планируется видео, спасибо.
@d.I.m.a.s256s
@d.I.m.a.s256s 4 ай бұрын
@@zprogerу меня выглядит по другому, я так понял это другой стиль ?
@vryaboshapko
@vryaboshapko 4 ай бұрын
@@d.I.m.a.s256s это новый UI, появился с 2023, кажется, версии. В настройках ищется по New UI.
@dyvniy_vershitel
@dyvniy_vershitel 4 ай бұрын
Питон всё больше скатывается в переусложнённость. Лично мне он нравится как простой скриптовый язык вроде LUA.
@andynaz7044
@andynaz7044 3 ай бұрын
для таких, как ты, он остался простым -- пиши, как раньше
@SeliverstovMusic
@SeliverstovMusic 4 ай бұрын
По мне их очень редко используют ибо не нужно. Даже именованные кортежи чаще используют
@ayattelzhanov9888
@ayattelzhanov9888 4 ай бұрын
Хочу перейти на rust😅. Но блин уже столько пройдено. Заного начинать мой раздутый пэт проект - не охота🥲
@zproger
@zproger 4 ай бұрын
Бывает)
@topevgn5914
@topevgn5914 4 ай бұрын
зачем это все если есть pydantic
@andynaz7044
@andynaz7044 3 ай бұрын
затем, что не всегда он доступен
@Djdjdjdjmemeo
@Djdjdjdjmemeo 4 ай бұрын
Этот "эм" это фишка чтоли?🥲🥲
@zproger
@zproger 4 ай бұрын
Да :)
@user-mc5ld4eb5s
@user-mc5ld4eb5s 4 ай бұрын
pydantic привет
@zproger
@zproger 4 ай бұрын
:))
@nakamasama
@nakamasama 4 ай бұрын
Какой-то бред. Я никогда не видел смысла в пакете typing. Если нужен словарь - ты будешь использовать словарь. Если нужен класс - будешь использовать класс. Я спокойно создавал классы, а потом просто обращался к их свойствам. И все вот эти надстройки и поверхностые оболочки над базовыми структурами данных зачастую не нужны. Этих двох структур достаточно с головой. А если кто-то допускает ошибки - он просто новичок, который меньше месяца учит язык и почти ничего не знает о технологиях проектирования, архитектуры ПО, сборки и т.д. Разработчик с опытом 6-9 месяцев и больше не будет допукать никогда таких ошибок, которые были описаны в начале ролика (за исключением случаев, если разработчик не спал два дня, работает больше 20 часов подряд и очень хочет спать). В крайнем случае, кто мне мешает перейти к функции и посмотреть, какой словарь ей возвращается??? Это будет проблемой только для тех, кто не умеет анализировать чужой код или для тех, кому лень потратить 1-8 секунд на просмотр структуры словаря...
@zproger
@zproger 4 ай бұрын
Типизация очень важна, и элементарное добавление таких аннотаций избавляет от огромного количества ошибок еще на этапе статики, не зря все крупные проекты с ног до головы пропитаны typing, mypy, pyright и т.д. Фишка типизации именно в том, что статические анализаторы будут ловить возможные ошибки еще только на этапе их формирования, и это исключает шанс того, что эта ошибка обнаружится именно на рантайме.
@nakamasama
@nakamasama 4 ай бұрын
@@zproger , я знаю, что типизация важна. Я ввиду имел, что для типизации достаточно обычного dict (если говорить о словаре). Как ты наводил пример def some_function() -> dict: return {"res": 5} Если ты сомневаешься в типе - перейди в функцию и посмотри какого типа значение ключа. Ну или если получаешь ошибку - конвертируй тип print("Result is " + str(some_function["res"])) а ещё лучше в этом примере написать print(f"Result is {some_function["res"]}") в этом случае все типы сами конвертируются, как нужно Питону. Я понимаю, что это самые простые примеры, но такой принцип работает в проекте любой сложности. Если вся проблема в незнании типа, не проще ли его просто посмотреть в функции или где ещё? Я знаю, что словарь может изменятся в процессе работы и в одно время там может храниться значение одного типа, а потом - другого. В этом случае проще переводить все занчения в тип строк. По этому в словаре для всех ключей всегда будут храниться строки. А потом можно строку конвертировать в нужный тип. Я просто хотел донести смысл, что нет нужды использовать какие-то обёртки над стандартными Питоновскими типами. Может для какого-то единствееного уникального проекта и будет смысл использовать "специализированную" бибилотеку, которая реализует такие типы, которых нет в Питоне. Но если язык даёт возможность типизировать переменные - лучше использовать возможности самого языка, а не какого-то модуля. Я сторонник такого программирования, где минимизируются сторонние библиотеки. Я по максимуму выжымаю ресурсы самого языка и если уже чего-то нет в языке - только потом обращаюсь к библиотекам.
@andynaz7044
@andynaz7044 3 ай бұрын
@@nakamasama какую чушь ты написал! typing -- это самый что ни на есть стандартный модуль, а не "специализированный"
@user-yg7hq4dd1w
@user-yg7hq4dd1w 3 ай бұрын
Понимаю, что комменту уже месяц, но все же. В идеальном мире мы все пишем сами, с нуля, да на чистой архитектуре. А в ральности случается конфиг на UserDict с парой сотней опций))) Еще один случай. Есть софтинка с очень мощным python api. Только вот сделано оно через парочку интерфейсов для совместимости с питоновскими типами. В итоге получаем автосгенерированную документацию на пару тысяч классов и обсолютное отсутствие какого либо code completion. Очень весело ловить None'ы-нежданчики в рантайме. Ну или пытаться угадывать какой из наследников "struct_base" хочет та или иная функция на вход 👍 Так же над одним и тем же кодом может работать несколько людей. Типы это, считай, половина документации к коду. Модуль typing заставляет тебя думать о своих структурах данных. А это 1) полезно для тебя 2) полезно для тех кто твой код читает 3) открывает путь для pylance, mypy, pytype 4) упрощат написание/генерацию доков. Это слишком круто, чтобы игнорить
@RVS89
@RVS89 4 ай бұрын
А для чего так перегружать код, когда можно просто посмотреть что от тебя требует словарь. Ведь посмотреть тебе нужно только один раз. А пайтону потом всю жизнь обрабатывать эти лишние строчки кода на сервере. Нужно же наоборот учиться писать код как можно проще для Интерпретатора так как она будучи загружена на сервер, будет выполнять код, а не для того чтобы там сэкономим 5 секунд своего времени.
@vryaboshapko
@vryaboshapko 4 ай бұрын
Мы живём в эпоху, когда машиночасы стоят на порядки дешевле, чем человекочасы. Так что если мы не говорим о высоких нагрузках, то сэкономить 5 секунд себе - это лучше, чем сэкономить 5 наносекунд машине. А высокие нагрузки - это уже совсем другая история. Но вообще все эти аннотации с типами отбрасываются после компиляции в байткод, так что на запущенном приложении они не несут дополнительной нагрузки.
@clutch3171
@clutch3171 4 ай бұрын
не совсем понял почему стринга стала интом в последнем TypeVar ? group[1]
@andynaz7044
@andynaz7044 3 ай бұрын
потому что он специально так написал
1🥺🎉 #thankyou
00:29
はじめしゃちょー(hajime)
Рет қаралды 78 МЛН
CAN YOU HELP ME? (ROAD TO 100 MLN!) #shorts
00:26
PANDA BOI
Рет қаралды 36 МЛН
UFC 302 : Махачев VS Порье
02:54
Setanta Sports UFC
Рет қаралды 994 М.
Can you beat this impossible game?
00:13
LOL
Рет қаралды 45 МЛН
10 признаков того, что вы новичок в Python
4:59
Архитектура FastAPI приложения | Шаблон
18:42
1🥺🎉 #thankyou
00:29
はじめしゃちょー(hajime)
Рет қаралды 78 МЛН