Прокачиваем типизацию Python-функций: None, NoReturn, Never, assert_never
HTML-код
- Опубликовано: 20 июн 2024
- 00:00 Типизация результата Python-функции
01:42 NoReturn
04:03 Never
08:55 NoReturn и Never как bottom type
10:04 assert_never
10:57 Когда что использовать?
Моя книга Типизированный Python, где подробно рассмотрен вопрос типизации:
to.digital/typed-python/
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб:
botanim.to.digital/
botanim_to_digital_bot.t.me/
Telegram - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Моя книга Типизированный Python, где подробно рассмотрен вопрос типизации:
to.digital/typed-python/
А можно версию с выравниваем текста по ширине?
ты куда пропал брат?
Голобурдин, когда расплатишься со студентами, которые для тебя книгу писали и курс делали? Троим не заплатил? Сам зарабатываешь за их счет?
@@MrRoggea где анашу брали?
@@ivanselyt я тут:)! Скоро вернусь
Нивер - новый писк моды, от создателей канкель, аплу и куеу.
Так точно!
@@t0digital теперь всегда буду так говорить))!
@@heathcliff5104Когда работал в ТТК (ISP), начальник отдела говорил "сукес", когда видел слово "success" в консоли. Я до сих пор так говорю. Хочу сразу предупредить, что это заразно и неизлечимо.
Я думал кУе-Уе 😆
подрнимаю щиты за тех парней которые скажут что нива это плохо а НЭВА - хорошо xD
за ролик большое спасибо
TRACTOR сильно конечно, но я за HELICOPTER 🚁🚁🚁
😂
ATTACK HELICOPTER 🚁
Извините, но почему "нИвэр"(never)? Я не придираюсь, видео отличное, просто интересно.
Так уж вышло бгг)))
Просто на английском стоит галочка "только для чтения" ) Главное что человек хорошо доносит свою мысль, делится этим с нами, а как кто разговаривает эт не так важно
@@t0digital Байт на комменты?)
Учит всё кроме английского
Классно! С сервером это супер-точный пример, я мучался пока пытался понять из-за чего код дальше молчит.
Раз 30 услышал слово нивер а этом видео, однако всегда читал нэвер. По-моему все говорят как и я, но ваш английский мне нравится :)
ты правильно читал
@@nnkaz1k856 та ладна?!
And never say never again :)
Серия видео про типизацию очень интересная. Было бы хорошо продолжить в глубину
Новый видосик, каеееееф. Попозже гляну обязательно👌
Хочу поблагодарить автора, за отличный материал и очень нравиться манера изложения! Спасибо.
Спасибооо!
Спасибо, отличное видео, кратко, по делу, понятно!!!
веб сарвар варцес апликейшн сарвар!
а если без шуток, то видео придётся смотреть второй раз))
Спасибо за информативность)
Спасибо! Интересно и полезно! 🔥
Спасибо, пойду посмотрю на код в своём проекте и поправлю типизацию)
Долго думал, что за такой Нивар), сначала думал, что это NiVar)), но потом понял, что речь про Нэвер:)
Можно ещё и "Newer" подумать :)
с момента про два гендера порвался. спасибо!
Спасибо за видосы :) Прекрасный контент. Больше пайтона, еще и django, было бы круто!
Спасибооо!
Интересно, полезно. Спасибо.
Спасибо за контент
Алексей, спасибо. Так держать!!!!!
Вот это круто! Профи пишет код в Vim! Приятно смотреть! :)
ни разу не разраб, почему я смотрю все ваши видео?😅
Благодарю, мне оч приятно:)!
Видео просто топище!
Благодарю!
Обожаю твои видео, обычно очень полезные
Спасибооо!
Дуже дякую! Корисне відео
контент возможно от части и полезный, хотя вот сам автор из группы "не всё так однозначно", так что думай те
@@pixel7139 понятненько 😁
@@pixel7139да вот думайте, да, полезное занятие
Кстати это видео стало рекордсменом по количеству неправильных произношений.
Думаете?
@@t0digital это то, что я больше всего люблю делать)
@@xjpfxei вы молодец:)
Спасибо за видео. Нехватает в описании ссылки на вашу книгу по типизации. И было бы круто обновить книгу этим материалом)
Аллилуйя! Я аж соскучился.
Привеееет!
Как же так.. нИвер.. ))
Спасибо 🙏
Алексей, расскажите (и покажите), пожалуйста, про свою коллекцию часов!)) Думаю, всем любителям часов будет очень интересно
Мне очень нравится ваши видео, вы просто супер просто объясняете сложные вещи. Спасибо! Может быть вы как-нибудь сделаете видео на тему scope и namespaces в Python? Не могу найти ни одного материала, ни на русском ни на английском, где бы объяснялось системно, как связаны и взаимодействуют между собой namespaces, symbol tables, scope. Везде всё какими-то кусками. Было бы зорово найти какой-то системное объяснение, так же как вы объяснили про переменные.
Алексей, спасибо за видео, очень много подчеркнул полезного в ваших видео для собственного развития !
P.S. Хотел бы поинтересоваться, вкратце опишу ситуацию )
Занимаюсь само изучением Python, по различным курсам типа Stepik и книгам по Python, но мое изучение сильно тормозит отсутствие ноутбука, на работе есть время но нет рабочей машинки, а десктоп на работу не повозишь )
Вопрос собственно вот в чем, все ли модели Thinkpad достаточно хороши, в данный момент колеблюсь между покупкой redmibook pro 14, или взять какой-то новенький более бюджетный Thinkpad x13 или e14, c дальнейшим переходом на линукс, возможно ваш ответ помог бы определиться с выбором, заранее спасибо !)
Здравствуйте! Обожаю ваши видео. Скоро буду выставлять сайт на хостинг. Подскажите, какой веб сервис использовать?
Спасибо! Мы используем Selectel, Яндекс Облако, но вообще выбор сейчас большой
Большое спасибо за видео - очень интересно! Подскажите, как можно настроить vim, чтобы он так же потрясающе, как и у вас отображал предупреждения и ошибки?
ruclips.net/video/PA7zZNJXJEk/видео.html
Здравствуйте. Хотел можно где-нибудь посмотреть запись Вашего курса по Веб-разработке на Пайтон?
Перевыпуск курса сейчас готовится, смотрите новости на канале здесь и в телеграме t.me/t0digital
Нивер нивер лет ю гоу.... нивер сэй невер эс нивер. Фак.
Дядя Лёша, а можете пожалуйста ролик выпустить какой-нибудь? очень давно не видел от вас роликов.
спасибов
Вжуууух и новый ролик появился сегодня:)
большое спасибо@@t0digital увидел и отблагодарил там в комментах
Можно такой же классный разбор новых thread в 3.12?
Алексей, спасибо за контент. В какой программе записываешь экран с key-cast-ом?
Запись экрана? Это стандартный QuickTime в маке. И на монтаже добавляю кружок с лицом, это уже с камеры видео-файл
@@t0digital а анимацию, которая показывает, какие кнопки нажаты? Рисуете на монтаже?
@@itzlaboratory вроде такого нет в этом видео? Keycastr вообще для отображения нажимаемых кнопок
Добрый день, Алексей. Давно на вас пописан и благодарен за ваш труд на ниве просвещения.
Могли бы записать видео о том, как все-таки запустить на Python 3.10 реальный TCP сервер, работающий на внешнем "белом" IP ? Измучался искать ответ на этот вопрос. Все в интернете и на RUclips наперебой учат 1 и тому же - создавать socket-сервер на localhost, просто беда. Сейчас пишу клиент-серверное приложение, клиентами которого будут телефоны компании , соответственно сервер должен быть виден из интернета. Клиенты отправляют запросы, сервер получает данные из базы Postgree и возвращает клиентам данные , на основании полученных данных, Python при помощи kivyMD отображает информацию в удобном виде.
Собственно, и клиент и сервер уже готовы, но все это пока в мой домашней сети (точнее даже, на моем компе).
Судя по тотальному отсутствию информации в инете, не мне одному будет интересно.
Пробовал пробрасывать порт - не работает та же ошибка 10049, более того с проброшенным портом и localhost перестает работать с ошибкой 10048, после удаления проброса - снова работает локальный адрес.
Видел совет использовать в bind данные gethostname(), но в 3.10 нет такого метода и чем он заменен не понятно, кроме того в материалах, которые пишут о gethostname() так де пишут server = socket.socket(AF_INET, SOCK_STREAM), а в 3.10 уже просто server = socket(AF_INET, SOCK_STREAM).
Есть ли решение в 3.11 ? Мне от 3.11 пришлось отказаться, т.к. 3.11 пока не дружит с Kivy , хотя Kivy используется только на клиенте, можно сервер и на 3.11 сделать если в нем есть решение.
Буду очень признателен за ответ. Можно на почту или прямо сюда, опять же, многим будет интересно.
Очень интересный вопрос! Коммент в топ!
А почему именно TCP сервер? Любой веб фреймворк можно взять и на нем запилить, от flask до fastapi. Ну если принципиально TCP, то есть встроенный TCPServer
Здравствуйте, посмотрел ваши видео по код ревью - это просто пушка! Есть планы в ближайшем будущем ещё делать код ревью? Я бы отправил проект!
Отличная мысль, можно вернуть, да
@@t0digital Так прислать проект?😏 Если да то gmail в студию пожалуйста!
Как сделать такой же шрифт и тему в VS code? Можете написать их названия пожалуйста
У меня в видео редактор nvim. Тема gruvbox, шрифт Hack Nerd Font
Уважаемый, подскажи, пожалуйста, какое оборудование ты используешь в работе, а именно: какие микрофоны и подставку, какой внешний USB-интерфейс?
Здесь хороший звук?
Это микро rode ntg3, звуковая карта babyface pro fs, между ними аналоговый преобразователь Long. Но чаще всего я просто пишу этот же микро в камеру Sony fx3 или bmpcc4k. Есть на канале видео с Союз 013 fet, он виден в кадре. Видео про 3.12 python вообще просто с радиопетли Sennheiser g3 с петлёй zoom
Звук отличный, да и выглядит аппаратура прилично! А светлый микрофон у тебя на прошлых видео был, он чьего производства?
@@obfuscated-user это как раз союз, светлый
@@t0digital наш, что ли?
@@obfuscated-user наш
нИИвЭр
:)
Вопрос про Never и enum. Мы же функцию handle_incorrect_password с обработчиком, создали задолго до того как добавился третий пункт в enum, следовательно пока не заглянем в саму функцию handle_incorrect_password, мы ошибку не увидим. В чем смысл тогда такого исключения? При добавлении нового пункта в enum, нам ide не подсветит о том, что мы должны обработать третий пункт. Вот тут если кто-то объяснит, было бы неплохо
Это не нивер, и не невер. Это Нива!
Алексей вам 25-ым кадром прорекламировал отечественный автопром!
Что думаешь о Mojo?
Нэваааааааааа!!!
Добрый день. Спасибо вам за контент и хотелось бы поинтересоваться, насколько важно соблюдать типизацию при разработке на python? Как часто вы встречали большие проекты, в которых она используется?
Привет! Считаю, что типизация НЕ нужна, если:
а) программирование это не ваша профессия и вы пишете что-то для себя - разумеется, для себя можно писать как угодно;
б) или это очень маленькая программка.
В остальных случаях типизация нужна. Она решает две задачи:
а) увеличение надёжности программы за счёт постоянной проверки корректности типов статическим анализатором (обычно встраивается в CI/CD процесс, то есть в процесс сборки-подготовки системы к отгрузке пользователям);
б) и типизация упрощает разработку-поддержку-развитие системы за счёт подсказок в редакторе кода, автодополнений, подсветки ошибок, упрощения чтения кода (сразу видно, какие конкретно типы передаются в каждую функцию, не надо это искать по всему проекту и тд).
У меня есть небольшая книжка Типизированный Python to.digital/typed-python/
Ну комон, ну что за нивер))) ну нэвэр же)) ˈnevər
Очень крутой функционал
Жаль что на практике 90% кода даже в казалось б сильных командах без подобного
То есть даже в самом вылизанном коде на питоне полноценно работающей типизации не видел, может конечно по плохим компаниям хожу, а может это правда жизни
Иллюстрация Never на примере пола может нехило кому-то повесточку порвать! 😂
Снести видео могут за такое!
Типизация рулит 🦾
Да!
Что на счёт документирования ожидаемых исключений?
Фик знает. Это всё же не Java с их исключениями в сигнатуре функций
@@t0digital которые ещё и признаны ошибкой
@@t0digitalПодождите, конкретно документирование идёт, очевидно, в docstring, а там мы можем использовать :param, :type, :return, :rtype, :raise и прочее.
@@8urak1 это понятно. Я с таким (документированием исключений в докстринге функции) в питоне не сталкивался. Ничего не могу по этому поводу сказать
@@t0digital Ну, это про документацию и только. Как показывает моя практика, если документируется одно исключение, а по факту вызывается другое, то ни IDE, ни, логично, статический анализатор типов ошибку не видит, однако с несовпаденинием :param и сигнатуры мой PyCharm справляется.
Какой у вас статический анализатор типов ?
Pyright
@@t0digitalспасибо, Почему то у меня в вскоде пайрайт не выдает такое же предупреждение как у вас с гендерами :(
подскажи что за ноут у тебя? 14 дюймов?
Мак Эйр 13
@@t0digital спасибо за ответ! А ещё уточнение: 13й на базе процессоров М? и 13.3 дюйма хватает для программирования?
на M1. Мне экрана хватает, но это вопрос привычки
что делать если покрытие связи находится в мертвой зоне ?
Искать вышку ближайшую и если она не оч далеко - добивать до нее
Нивир))) у уши режет ведь невер)))
Что-то я умер на тракторе
Это особый гендер, тракторсексуал
когда будут видосы по RUST?)
А когда будет амнистия для комментов в телеге? Или у вас "вышка"? :)
какой у вас ник:)?
@@t0digital
mr_agb
p.s. давно бы уже Паша сделал r/o для доступа к комментам. Как раз для таких случаев ограничений.
личная амнистия done
@@t0digital
Благодарствую!
Да почему "нИвэр" если "нЭвер"?
Да почему "зарАйзить" если "рЭйз", а не "рАйз"?
Режет слух!
За видео спасибо ❤
Привет, как дела ? канал, надеюсь, забросил ? Такой шикарный канал, всем советую.
Не забросил, скоро вернусь!
нивер, забавно. Сами американцы говорят нэвер, например: "...off to never never land..."
Typethon
Привет! Уже видели/знаете про Mojo? Как вам?
Знаю, но пока рано о нем что-то говорить, если выживет и дойдет до релиза, посмотрим
специально произносите "нивер" ) ?
Нет
ньИвер say ньИвер!
Куда бро исчез? Запиши просто хоть что нидбудь. А то мы соскучились
Скоро вернусь!
@@t0digital Ждем)) Случайно на твой видос наткнулся и вспомнил ,что-то давно я тебя не видал😁
Нивэр нивэр нивэр нивэр нивэр нивэр нивэр
Да-да!
Не помню какого гендера уважаемый создатель Mojo, кстати.
Нивер? :)
Именно:)
Где новые видео!!!
Автор ты куда пропал, где новые видосики?
Скоро появятся!
Правда что python медленнее PHP?
Да
Почему же нИвэр если нЭвэр? 😅😅😅
мне нравится ваш позитив и всё такое, но! на слова типа "замечательный", "прекрасный", "великолепный" уходит слишком много времени. Четверть видоса мы слушаем о том, какое всё вокруг замечательное.
Не мне учить вас как жить и как делать видосы. Просто решил вкинуть немного критики в ваш замечательный, прекрасный контент
Был JavaScript, стал TypeScript
Был Python, стал ..Typhon??
А питон остался питоном:) но на самом деле введение типизация без значительной переработки ядра языка даёт много ограничений. В TS типизация значительно лучше построена, чем в питоне
@@t0digital в TS безусловно очень крутая типизация. К сожалению, её слишком часто используют в виде - "а давайте повторим всю бизнес логику ещё и в типах и ещё крайние случаи приплетём и ещё костыли по месту расставим ибо отовсюду сквозит бажная система типов JS". Короче - получается слишком умный код. А хотелось бы просто радоваться жизни, типы ставить опционально и чаще пользоваться выводом типов компилятором.
Об этом же, кстати, ещё и создатель Ruby говорил, но хз насколько удобен их подход - таки непривычно когда типы не видишь сразу в коде (они указываются отдельно).
Или может надо сперва упороться в хаскель и всё станет проще?)
Хз где та граница, где типы больше помогают, чем добавляют сложностей.
Never выглядит переусложнённым.
Алексей!!!! Ой май год!
Нивер больше не говорите «нивер» 🤦🏻♂️
Never - нЭвэ. Или если нравится бритиш Инглиш, то нЭва
Как по мне, типизированный python писать сложнее, чем просто использовать строго типизированные языки такие как Java или C#.
Я считаю что это просто "дополнительный мусор"
Язык создавался без типизации и это его была фишка
А теперь люди пытаются "запихнуть" эту типизацию которая ни на что не влияет (просто захламляет какими-то по сути комметами код)
Хотите типизацию?
Есть куча прекрасных языков которые представляют данную возможность)
Познавательно. Но что за нИва? Ухо режет)
Как же ж, аутомобиль такой!
@@t0digital Канал вроде не на автомобильную тематику
@@LX4nd3r вроде да
Please know that this guy stole your video idea and copied it for his channel:
ruclips.net/video/GHa4x7BO25I/видео.htmlsi=rN0HgYciqxxf0oav
He "coincidentally":
- has exactly the same topic
- names his function "assert_never"
- also uses enum
The three together - in my opinion - show he stole the video.
Нива - топ! Но когда её реально импользовать пока непонятно
Заблокируйте меня ещё здесь пожалуйста, спасибо
Так нивэ или невэ кто точно знает?))) я знаю как невэ
нИвер - шЫкарно :)
а в целом "...изобретая статическую типизацию..." - мне дико не понятна и не нравится попытка скрещивания ежа и ужа. Я про эксплицитную типиизацию.
В итоге получается что приходится(! именно приходится !) описывать(хинтами) "большую часть айсберга", тогда как новомодные веяния типа того же Nim - идут по принципу - указывать типы только там где необходимо(полагаясь на умный компилятор). В итоге в питон просто посредь белого дня ВТАЩИЛИ телегу с навозом, пытаются ее всячески обвешать цветочками и рюшечками - мол смотри как круто, тут тебе подсказочка, тут тебе ништячок для этого того пятого десятого, а что по факту? по факту мы а) должны впитывать типизацию б) незаметно потеряем красоту кода на питоне...
Про nim не скажу, не изучал, но в питоне в бол-ве случаев указываются типы только на границах - для аргументов функций и из результатов. Все, что внутри функции, не типизируется. Не вижу проблемы типизировать функции, более того это приводит к необходимости думать о типах и вместо передачи по приложению галимого dict, начинаются вводиться нормальные структуры - dataclass и тп
@@t0digital ну это до момента когда придется(! придется !)
написать хинт на какой нить декоратор асинхронной функции, потратить на это час, только ради того чтобы прекоммит схавал твою элементарную функцию.
Фор экзампле:
NoArgsNoReturnAsyncFuncT = Callable[[], Coroutine[Any, Any, None]]
NoArgsNoReturnDecorator = Callable[
[NoArgsNoReturnAsyncFuncT], Callable[[], Coroutine[Any, Any, Task]]
]
...в книжках и туторах всегда просто и красиво.
Особенно подбешивает эта тема когда ты просто вызвал/принял что то чужое, и тебе анализатор пишет - "так, давай ка поподробнее что за говнище у нас на кордоне?"
@@user-zc3zk8wd8p Так её не обязательно типизировать. 100% типизация это как 100% покрытие тестами - обычно бесполезно.
@@user-dy4nj1cd2d Не обязательно типизировать?! Рили?! Может есть еще какие то светлые мысли? Ток помедленнее, буду копипастить
ну и раз уж начали про тесты...
да, 100%-е покрытие обычно бесполезно, реальная польза начинается с 1000%
ну вот умеешь же по человечески говорить, что за дичь с голосом в видосе про python 3.12?
TRACTOR в Gender выглядит как-то трансфобно на самом деле...
«ниве…» ужас, кровь из ушей.
Вставьте ушные палочки, берегите кровушку, приходится можт ещё!
Дислик за грязнющий байт в виде неправильного произоншения слова never
Дизлайк вам за грязнющее обвинение в байте хах
Уххх какой щекастый инфоцыган ))))
Я такооой ☺
Нэвэр
нэвэ тогда уж, душнилы)