Python 3.10 - ЛУЧШИЙ релиз после 3.7! Pattern matching, новинки и при чём здесь Rust
HTML-код
- Опубликовано: 4 окт 2021
- Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Вчера вышел Python 3.10 - и это лучший релиз Python за последние годы. Поговорим о новинках и подробно рассмотрим новое выразительное средство языка - Pattern Matching, а также узнаем, при чём здесь Rust, откуда вообще ноги растут, и, главное, куда:)!.
Стрим Core разработчиков Python о релизе 3.10 • Python 3.10 Release St...
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Опчки-опчки! Мой курс «Хардкорная веб-разработка» - course.to.digital
Вжух!
Здравствуйте. Сделайте пожалуйста видео про Kivy🙏🏻
Алексей, как с вами связаться?
@@mk-wq6ns если по вопросам курса, то course@to.digital
когда перешёл в Python после C++ с нереальной загаженностью синтаксиса, а смотрю из твоего любимого питона тот же С++ делают!
@@cicik57 Плюсы хоть и загажены, но неизбежны для кода, критичного по времени :)
Кстати, тот же Rust позиционируется как альтернатива C++ для системной или критичной разработки, но серьёзных примеров пока нет.
Но в целом язык интересный и перспективный, занимался им лет 5 назад
При написании Helo world, ожидал, что выдаст ошибку - expected 'l'...
Halo world - expected 'a' )))
Очень познавательно и удобно, когда вечером за чашкой чая смотришь нововведения в языке. Надеюсь это станет традицией))
Спасибооо! Мне тоже нравится:)))
полностью поддерживаю, сам на питоне не пишу, мне он не заходит, но весь бэк у нас на питоне, потому бок о бок сталкиваешься, надо быть в теме и это прям оч полезно)
@@snatvb на жс пишете?
@@user-sn3mg8wk7v конечно, хейтерочкам пуканы подрывать
@@user-gf7fr8qw2e основа - да(ts), на расте для души)
ну и еще на rescript (в js компилится)
Спасибо! Очень доступно и познавательно!
Спасибо большое за контент. Доходчиво объясняете, порой даже чересчур из-за манеры повторять сказанное по несколько раз.
Шикарные примеры🙌
Очень понятно и красиво всё подаёшь, спасибо!
Доходчиво и внятно, спасибо!
Спасибо за видео, очень интересно! :)
Круто, спасибо за видео !
Очень полезно! Спасибо Вам!
Классный выпуск! всем офисом Вас смотрим)
Спасибо за видео, удачи тебе!!!
Спасибо! Очень интересно!
Pattern matching используется с 1957г)
Представьте, несколько медленно важные концепты входят в жизнь.
Мир юн.
Можно пруфы?
Около месяца учу Скалу. Там паттерн матчинг очень понравился, понял что в Питоне его реально не хватает. И тут такой подарок!
Спасибо за видосы! Как на счет розыгрыша курса на новый год? думаю, подарочек что нужно!
Только недавно начала изучать питон, с такими подсказками и правда приятнее 😅 Спасибо Вам за видео, очень познавательно и интересно!
Отлично, рад, что полезно!
Спасибо за обзор, очень понравился =)
Спасибо было очень интересно
Я, как человек который программировал в ФП стиле, безмерно рад тому, что в языках появляется эта крайне удобная штука, а еще что монады потихоньку проникают в другие языки, Result и Option тому примеры)
Только, к сожалению, не Result из примера, не питоновский Optional не являются монадами
@@mikhailpinchukov9384 это жаль :с
Да и паттерн матичинг стейтмент а не выражение
Спасибо! Это гениально!!
Спасибо! Крутой канал, почему я только сейчас его нашел???? Удачи
Лучше сейчас, чем никогда:) СПАСИБО!
Хороший разбор Pattern matching, спасибо!
Удобная штука, 7 лет уже в Elixir им пользуюсь)
Жаль в Python не завезли пока pattern matching в сигнатурах функций, тоже мегаудобная тема.
Обзор обновлений языка - очень интересно
буквально пару дней назад изучал паттерн матчинг в Расте, оч похоже, прям все фишки из Растового матчинга завезли )))
15:17 а, просто условие поставить с регекспом, отлично!
Один из самых крутых и полезных каналов на ютубе, просто глоток свежего воздуха. Алексей, жги и не останавливайся! Большое человеческое спасибо!
Спасибооо, приятно! Буду продолжать:)
Обзоры новых фич - топчег.
А с примерами кода ваще самолёт!
Не новость, а Бомба!!! Спасибо.
Это шедевр!!!
Новый питон действительно хорош! Ждем 3.11
Спасибо за видео!
Подскажите, пожалуйста, в чем ролики делаете? (фича со спикером в уголке и кодом посередине просто шикарная)
Спасибо! Запись экрана - маковская родная программа Quicktime, и потом на монтаже накладываю обрезанную картинку из камеры на запись с экрана. Монтирую в Davinci Resolve, но так можно сделать вероятнее всего в любой монтажке
Вы такой крутой, спасибо большое за все ваши видео, очень познавательно! Сделайте пожалуйста видео о том как делать высоконагруженные системы. Чтобы приложение выдерживало огромный трафик пользователей. ОООЧЕНЬ НАДО!
Спасибо!
Уже есть такой видос ruclips.net/video/kclYmb47LTg/видео.html
Очень нравится картинка видео, голос, дикция 👍👍👍
Спасибооо!
лучший обзор) спасибо!
Спасибооо!
есть же Pydantic для классов и typeguard для функций чтобы были проверки типизации в рантайме, без всяких isinstance.
Вообще выглядит кстати костылем что разработчику на питоне приходится делать что то кроме аннотации типов для проверок типов.
Если есть аннотация типа то всё остальное должен делать сам питон.
Динамическая типизация должна быть дополнительной и опциональной.
Алексей, спасибо. Подписался
За "Привет катаны!" отдельный огромный лайк!!!
Эта прекрасная фраза почему-то куда-то пропала на некоторое время, что лично меня огорчило.
Да, мне нравится и сама фраза, и как Алексей ее произносит!
Видео как всегда огонь!
Кратко и содержательно.
Спасибооо:)!
спасибо за видео
Алексей забыл упомянуть, что какой паттерн быстрее найдется, такой и будет результатом. А паттернов подходящих может быть несколько. К примеру:
conf = {
'field1': 12,
'field2': '100500',
'field3': ['abc', 'def', 'ghi']
}
match conf:
case {'field2': str(field2_), 'field3': list(field3_)}:
print(f'conf: field2: {field2_} ; field3: {field3_}')
case {'field1': int(field1_)}:
print(f'conf: field1: {field1_}')
case _:
print('conf: HZ')
В typescript те же тайпхидднги
В java тоже надо всё что может выбрасывать throwable обрабатывать явно оборачивая в try либо указываем что метод может что-то выбрасывать и тогда уже его заставляют оборачивать в try)
Добрый день, Алексей! Приятно удивлен, что с последнего ролика прошло меньше недели!
Я сам не пишу на python, но на каждый подобный обзор я завариваю чаёк, сажусь и великолепно провожу 20-40 минут, что бы быть в курсе "чево там нового у питонистов случалось".
Любое видео у вас, Алексей, очень... как бы выразиться точнее... уютное! Вы даёте исчерпывающую информацию по материалу без какого-то надменного снобизма и всегда с оглядкой на тех, кто может только начинать. Чувствуется, что от человека и для людей. Лучи добра и благодарности вам!
Большое вам спасибо за приятные слова!
Сравнение с растом почему-то напомнило dry-python/returns, хотя возможно это немного не про то.
Почти визуальный оргазм, давно хотелось чего-то подобного в пайтоне :) Спасибо за обзор!
У меня тут тоже визуальный оргазм хотя и не питонист, в java 17 так же ввели pattern matching, не заметил релиза но тут автор подсказал :)
Ok | Err - это не enum, а discriminated union. Enum - это набор констант все-таки, а тут некоторое дерево подклассов. В некоторых языках он встроен, в некоторых (в Котлине, например) его можно сделать на базе sealed классов. В Питоне же только сымитировать (нет механизма, позволяющего статически проверить, все ли случаи покрыты pattern matching'ом).
Я и не называю это enum, конечно, это не enum. Это некоторый аналог растовского енама для демонстрации идеи на питон коде.
8:43 isinstance(user_input,list) сработает только если на вход лист, а не любой iterable
Когда начинал изучать Rust мне там очень понравился именно Pattern matching.
Я тогда подумал - как жалко что в такого нет в Python.
Но, интересен ещё вопрос, как использование Pattern matching в Python 3.10 сказывается на скорости исполнения кода?
Понятно, что Pattern matching упрощает написание и чтение кода, но хочется понять как это реализуется на низком уровне и как влияет на скорость исполнения кода в сравнении с алтернативными вариантами.
Это может быть интересно ещё и по тому, что, насколько я знаю, часто при добавлении новых возможностей (например в язык программирования), в первых версиях разработчики концентрируются на стабильности, а не на скорости реализации, и в дальнейших версиях продукта начинают постепенную оптимизацию по скорости. (Например, такой подход применяется разработчиками того же Rust).
Огненно!🔥
То чувство, когда в твоей компании все еще python3.7, просто потому шта некогда обновиться и всякие дикие либы посыпятся😔
спасибо
какой же хороший канал
последний кусок видео отлично подводит к использованию библиотеки dry-python/returns =) знакомы с ней? было бы любопытно послушать мнение
:) улыбнул в начале с очками...
0:46, шестой особенно красив)
Бро, что с тобой? Сильно поправился) Хорош) Я тебя аж не сразу узнал...
Это все очки и подлинневшие волосы)))
шикарная подача материала, прекрасное качество звука и видео!!!
Спасибооо!
13:10 Можно тут использовать enum классы вместо явного перечисления? Например, указать просто что мы хотим получить пару case Movement, value:, где Movement это class Movement(Enum): LEFT = 1 RIGHT = 2 TOP = 3 BOTTOM = 4 ?
p.s. 7:20 Подходил к концу 2021 год, люди использующие интерпретируемые языки с динамической типизацией продолжали для себя переоткрывать плюсы статической типизации :)
Зачем спрашиваешь если можешь попробовать сам?
@@user-tu4ze5dc9b для дискуссии. Попробовать самому можно, но хочется и поделиться.
@@cardinalerror1 Понял вас ну я тоже часть дискуссии только выходить плохой)
Вспоминаю фразу [одного случайного мэна] со stackoverflow про интерпретацию/компиляцию/блаблабла.
"Welcome to the world of computer programming. We decided to make it extremely complicated, then attach non-descriptive names to everything.
The purpose is to create flamewars over the definition of words which have no practical meaning." (с) John Moser
"Добро пожаловать в мир компьютерного программирования. Мы сделали его как можно сложнее, а потом дали всем вещам непонятные, не говорящие названия, и всё это лишь для того, чтобы разжечь войны насчет определения тех терминов, которые даже не имеют практической ценности".
Впрочем, на своём канале обязательно об этом расскажу. Наверное, через несколько месяцев.
Но насчёт статической/динамической типизации несомненно согласен :)
Замечательно? Замечательно)))
Спасибо за обзор.
таки да:)!
а вот фишка с Result это круто, типа внутреннего не хватает
Блин... Я нихрена не понимаю в этом, но подача материала заставила меня залипнуть на 33 минуты 👍
Спасибо:))) Надеюсь, что-то полезного вынесли для себя:)
@@t0digital Да, давно хочу начать изучать какой нибудь язык программирования. Мозги и желание есть, но никак не могу определиться с чего начать. Больше склоняюсь к языкам С. Так как большее время приходится работать с микроконтроллерами.
Есть MicroPython, но он ещё не так развит.
Вам Алексей спасибо. С удовольствием смотрю иногда ваши видео, подписан на ваш канал.
Вы не хотите сделать курс по изучению Python?
Я знаю, что у вас есть курс, но это не совсем то.
Я честно не понимаю, зачем делать платные курсы, ведь их тут же сольют.
Может сделать новый канал и включить донат. Я знаю, что все привыкли к халяве и я в том числе.
Но если мне помогает это и нравится, то я с удовольствием помогаю "поддержать штаны".
В общем: желаю вам всех благополучий, здоровья и конечно много подписчиков, коим являюсь и я.
Каждый день выходит, не успеваю обновлять
Расскажи плс какие языки еще щупал и что взял бы на замену пайтона? В качестве ЯП общего назначения.
Спасибо
Да питон в общем-то ЯП как раз общего назначения. JS в какой-то степени им стал. PHP так и остался в вебе. Я не ищу именно замену питону, хочу просто добавить один быстрый язык в свою базу. Скорее всего им станет Rust
Спасибо, очень интересно. Очки тебе идут, похож на ленивого котана)
Хороший ролик) Скажите, пожалуйста, а как вы запускаете скрипт через вим?
сейчас висит на CTRL+R, но перевешу на какое-то другое сочетание. Сейчас так:
autocmd FileType python map :w:exec '!python3' shellescape(@%, 1)
autocmd FileType python imap :w:exec '!python3' shellescape(@%, 1)
Алексей, упустил комментарий Ваш в обсуждениях. Спрошу здесь.
Очень интересно: какую прикладную задачу Вы хотите решить с помощью Rust lang?
(Меня впечатлил доклад Александра Сербула из Битрикс про push-уведомления.
Когда они с помощью смены языка программирования заменили 8 мощных железяк на всего 1. И, как я понял, менее мощную чем были раньше.
Более того, больше к коду не возвращались и работает как часы.)
Да, видел этот доклад. У нас тоже есть ряд задач, которые хочется решить - ускорить работу API и сократить расходы на железо. Большинство веб-приложений не имеет такой уж сложной логики, которую сложно переписать на другой язык. Вся логика там достать данные из БД или кеша, малость пересобрать их и отдать результат. А если так, то почему бы те места, в которых важна скорость и которые жрут много железок, не переписать на Rust, тем самым решив свои задачи. Да, погружение в язык дольше, чем в скриптовые, это понятно, но результат себя должен оправдать.
Не хватает ещё when конструкции из Эрланга. Очень удобная.
>> такие фп с паттерн-матчингом как scala, erlang и rust
haskell и ocaml как ярчайших представителей типизированных ФЯ с паттерн-матчингом стоило в первую очередь упомянуть, ну уж никак не скалу и эрланг
Хотел спросить ещё с прошлого видоса, а что с Go и откуда появился Rust в твоём скилсете
Такой же вопрос если честно
2:35 новый синтаксис для union утащили из Typescript похоже
"ЭТО НЕ ТО, ЭТО ДРУГОЕ"
@
...
@
ТО
Имею в виду, что приблизительно похожее - "switch true", просто здесь свитчится не тру, а отсутствие/наличие эксепшона
Отлично. Осталось дождаться подтверждения что FastAPI работает на 3.10
И можно переписать if else
Наконец-то дождались! В сраном PHP всё это появилось уже давно, причём входные типы не нужно проверять - они проверяются в ходе выполнения программы. Проверка входных типов в python - это убогий костыль.
Речь о том, что указанные типы в пхп проверяются интерпретатором?
@@t0digital Да
Лех давай курс по виму сделай, очень хочется его от тебя увидеть
PHP год назад для 8 версии утащил синтаксис аннотаций из Rust , как и оператор match.
Пхп тоже молодцом
На счет тайпингов, мидл пайтона тут:
Передавать в функцию с типизацией значение, которое не соответствует запрашиваемому типу это плохой тон, и делая так нужно понимать, что может произойти что угодно. Так что, как минимум в моих последних двух компаниях, делать дополнительные проверки в рантайме на тип не нужно. Опять же, может быть на просто list, который можно проверить в isinstance, а может быть что-то вроде dict[str, list[dict[int, int]]] и проверять весь этот объект на правильность типа - может быть очень затратной задачей.
mypy обычно настраивают для проверки корректности использования типов и встраивают эту проверку вместе с другими тестами в CI процесс, чтобы быть уверенным, что этим «плохим тоном» никто не пользуется. Проверки в рантайме затратны, да, а при подготовке билда отдельным инструментом - норм:)
Хороший компилятор и синтаксисы интересные
О да
крутое видео
Спасибо, а то нормальных обзоров ещё нет, а на термуксе сегодня прилетел 3.10.
@Pathetic {ОЧП} возможно. Но с моим английским я там на половину дня зависнуть могу, и не пойму половину. А автоперевод можно не предлагать.
Полезное видео, спасибо! Поделись конфигом nvim :)
Всё сорян, увидел предыдущее видео.
на каком моменте в видео ты сравнивал pattern matching and switch case?
Сравнения не было
Дядичка подскажи как грамотно настроить zsh чтобы подсветка автодополнение и прочее было ?
Если уверены, что вопрос по zsh, то вам нужен плагин oh-my-zsh.
Если вопрос про nvim - см предыдущее видео на канале, там полная настройка показана.
Привет, что вообще думаешь про цель питона через 4-5 версий достичь x5 ускорения?)
Привет, а где такая цель озвучена/поставлена? Я не слышал
Для достижения такой цели язык придётся очень сильно изменить, сделать рантайм как можно меньше, чтобы интерпретатор делал как можно меньше проверок. Это уже будет совсем другой язык тогда
@UCeGW91LTIfdSemh6OSKiOBw ютуб твою ссылку почикал, вот она, надеюсь мой коммент не почикает:)
github.com/markshannon/faster-cpython/blob/master/plan.md
Спасибо! Наполеоновские планы. Но в 5 раз - не верю:) Питон по моим тестам самый медленный из троицы php/js/python, отстает сильно, но не в 5 раз. Вот прям с последнего места на первое - ну не уверен. Если честно, я и не уверен, что это прям настолько важная задача ускорять питон. Он скриптовый, он выше своей скриптовой головы не прыгнет всё равно, ну станет чуть быстрее, ну сравняется с условным php, мир от этого не перевернётся.
@@t0digital Самому мало вериться, ну и тоже считаю что в питоне скорость не главное. Но если JS c его то слабой типизацией и костылями смог в скорость то надеюсь и у питончика получиться :)
Ржу с динамической типизации питона, ведь по итогу ты все равно для устойчивого кода расставляешь линты и проверяешь является ли обьект тем самым типом, что тебе нужен. (классный язык, но дырявый)
Еще прям ооочень хочу тайп линты на самого себя!
ну когда тип может возвращать из метода обьект своего типа
Ну он же изначально задумывался как интерпретируемый язык, тем более в те времена казалось, что динамическая типизация это будущее. Интересно у питона нет статистически типизированного диалекта?
Привет))) твоё обращение "здорово, котаны" что значит?
psycopg2-binary Нормально используете?
я правильно понимаю что в питоне нет возможности явно указать тип принимаемых данных переменной или его приведение
function ([int]$q, [sting]$b) { foo ; bar ; return [uint64] bazz; }
?
В питоне есть только подсказки типов. Подсказки не проверяются интерпретатором. Они для читающего код разработчика, а также для IDE и систем анализа кода вроде mypy.
Если мы хотим писать код, который не сваливается в рантайме, все очень просто... берем rust и пишем программу)
Магия с типами чем-то напоминает синтаксис больше TypeScript ;D
А сравнения по производительности есть?
Нужно больше Rust'а 😊
Я думаю, что строку "Явное лучше неявного" можно смело вычёркивать из дзена пайтон.
If the implementation is hard to explain, it's a bad idea.
А где конкретно эта строка была послана к чëрту?
Это дзен писался ещё для 2го питонп
Эмм, а что тут неявного? По-моему, все супер очевидно и этого давно не хватало. Намного лучше, чем непонятные схемы зефирок или пидантика костылить или вермишель из isinstance городить для элементарных проверок уровня "Тут число или строка?"
@@_4ado чем зефирка то не устроила?))
Интересно... Куда к своим проектам паттерн матчинг прикрутить я уже буквально вижу. Если руки и голова до рефакторинга дойдут... Хоть и сахарок, но в данном случае - полезный! ;) Более конкретное указание на место ошибки тоже однозначно облегчит жизнь. Ну а на счёт исключений - предусмотреть всё невозможно без влияния на производительность. Тут некоторый баланс, на мой взгляд, нужен. Впрочем, если мне доведётся что-то на rust писать, тогда, может быть, точка зрения несколько изменится...
Алексей, а есть курс как научиться работать в виме также как вы?
А зачем? Просто выберите редактор, который вам удобен.
Как скалист, радуюсь, что в языки завозят фп фичи) рад за питонистов, посмотрим как приживется
Да, pattern matching существует в Clean, в Haskell и прочих уже почти полвека
а что творится с pypi? через pip практически ничего не могу установить? вернее очень долго все происходит?
Будут ли ещё разборы Open Source библиотек или какие-нибудь разборы кода Senior разработчиков?
Разбор опен сорса будет. Какие либо было бы интересно посмотреть?
@@t0digital привет! было бы интересно что-нибудь трендовое, по типу aiohttp или sanic
@@t0digital было бы здорово сделать разбор coconut или hylang
@@ssatskov ой, aiohttp сразу в пень, ноль желания в нём ковыряться:) sanic можно
@@user-xt6si6ve4v спасибо!
Про то что Quit, -- это распаковка как найти эту тему по подробнее
Rust + python = good toolkit
Yep!
Я под бокальчик вина прекрасно провёл 33 минуты)))
Вовремя выпуск вышел 😋
Хахахах:) отлично!
Алексей, у вас бывает что вы в терминале и забыли какую-то команду, нужно загуглить буквально первую ссылку на стэковерфлоу, что используете чтобы гуглить из терминала?
знаю, что есть такие инструменты, но мне удобнее для этого браузер