Для тех, кто не понял, := это одновременно объявить и передать объект в качестве операнда. Раньше было так: a = 5 if a > 10: pass Скоро станет так: if a := 5 > 10: pass
3:40 я думаю ты показал неудачный пример, так как это и раньше не работало. У тебя кейворд аргументы функции называются x, y. А ты в вызове пытаешься присвоить значение по имени a, b.
Эх, медленно подписчики растут, похоже, пора пилить видео «самый лучший способ взломать Пентагон в 2019м», «как выучить Python за час», «как программисту заработать миллион» и «программируем утюг»:)
@@albertkaraev4686 а мне наоборот Котаны уши режет. Ламповости оно не добавляет, добавляет лишь "простачковость", и начисто убивает ореол "профессионала", конечно последующее повествование его восстанавливает, но начало смазывает. Это при всём при том что разказчик мне импонирует.
@@avazart614 если бы был на 100% универсальный язык, все бы писали на нём, поэтому конечно сначала задача, потом язык. Но Python близок к универсальному, а узкие блоки кода, где нужна max производительность и где она проседает, можно переписать на C, не меняя остальной код приложения, то есть остальные 99%, написанного быстро на Python.
@@t0digital донести бы эти мысли моему шефу. Который после рукожопов понаписавших говнокод, как например 25000 SQL запросов для рендеринга одной страницы(и я не преувеличиваю((), решил на сях свою базу писать, потому что mysql слишком медленная....
Привет! Нашёл тебя недавно. Классно и легко смотреть, спасибо за хороший звук и отсутствие "эммм" и прочего. Имхо, можно так же в подобных видео добавлять чуть больше развёртывания, нежели "вот вам TypedDict” Если глянуть твоё видео про работы со сложными структурами, можно сделать вывод, что typeddict - тоже самое, что и namedtuple, основываясь на примерах, которые ты приводишь. И может сложиться представление , что этот тип в 3.8 - бесполезен (да, да, все мы знаем, что ничего в языки программирования не добавляется просто так)((кроме очередной библиотеки в JS)). В то время как на самом-то деле разница есть. Это просто обратная связь,не держи зла)
Wow... Linux book... May be it was www.ozon.ru/product/linux-karmannyy-spravochnik-2-e-izdanie-148627162/?from=share_android Linux Phrasebook, author is Scott Granneman
Просто офигенные новшества! Circular dependency так и не пофиксили, что ограничивает строгую типизацию. Зато добавили бесполезный синтаксический сахар и какие-то старые фичи из других языков, называя всё это новшеством. Аналог TypedDict есть, например, в Angular. А, интересно, нормальный dependency injection в Python/Django где-нибудь есть? Модификатор final вообще порадовал! Я, конечно, новичок в Python, но я не знал, что он только сейчас появился!
* «Circular dependency так и не пофиксили» наличие проблем с Circular dependency в коде говорит о его плохой архитектуре, а о не минусе языка, на котором код написан. Язык просто не позволяет сделать вам херовые вещи и это хорошо. * «Зато добавили бесполезный синтаксический сахар» бесполезного никто нигде ничего не внедряет, ни в одном ЯП нет бесполезных вещей. Если вы не можете найти применение чему-то, это говорит о вашем непонимании инструмента и целей его внедрения - и ни о чём больше это не говорит. * «Аналог TypedDict есть, например, в Angular» сравнивать ЯП и фреймворк это как сравнивать двигатель автомобиля и готовый автомобиль * «А, интересно, нормальный dependency injection в Python/Django где-нибудь есть» - вы уверены, что знаете, что это такое? В любом ЯП, где есть объекты и конструкторы, реализуется DI. * «Модификатор final вообще порадовал» - декоратор final отлично решает свою задачу, да.
Ладно не буду мучить. Сам уже допёр. Можешь не читать, если охота самому подумать. Там вместо WebSocketManager нужно передавать тип IWebSocketManager, то есть его абстрактный класс.
Как на счет Label под видео для ранжирования аудитории? Это видео полезно - всем , начинающим, средней руки и т/п Потом какие-нибудь трюки языка для решения интересных или стандартных задач не очевидным способами. Ну и иногда хайповать интересными проектами Python + ML, но из разряда - это просто, тут сложнее, а это все вроде знают , но допускают кучу ошибок.
А теперь давайте сравним первый пример с аналогичным фрагментом на CoffeeScript. Допустим, у нас уже определены функции first и second. А они, конечно, определены потому что нужны постоянно: first = (arr) -> arr[0] second = (arr) -> arr[1] Так же сокращения: cl = console .log и to_arr = Array .from И вжжжух! никаких лишних скобок: hello = 'Hello, cat!' cl name if name = second first to_arr hello .matchAll /, (.*)/g Почему нельзя обойтись одним '=' ?
Режим наложения слоя с терминалом Add в final cut, есть такое же в любой монтажке. Чёрный фон терминала и почти чёрный фон видео в этом месте дают такой эффект
Правильно понимаю, что если a = b то переменной a присваивается ссылка на область памяти в которой хранится значение переменной b. А если a := b, то под переменную a выделяется новая область памяти куда копируется значение из b или это не так и смысл := в чем-то другом?
С точки зрения работы по ссылкам в := все аналогично простому =. В a := b просто происходит проверка значения b на трушность, если b трушна, то a присваивается ссылка на область памяти, в которой хранится b.
Согласно исследованиям количество кода, которое девелопер пишет за день, примерно одинаково для разных языков и технологий. Поэтому если для решения задачи на условном питоне надо написать тысячу строк кода, а на условной Java 2 тысячи строк, то это вполне может означать, что Python команда может сделать проект не за 2 года, а за 1 год - и это весомо. Не думаю, что корреляция настолько явная, но что она есть - факт неоспоримый, чем меньше кода надо писать для решения задачи, тем быстрее задача делается. В случае адекватного pythonic кода он остаётся лаконичным и выразительным => поддерживаемым.
@@t0digital ещё бы пруфы на исследования, было бы чудесно. Не припомню таких проектов, где именно набрать код было бы проблемой. Большую часть времени приходится тратить на продумывание, курение доков и прочие штуки. Если бы я сидел и набирал код даже 50-60% времени, то мог бы вполне оправдано называться машинистом. А ещё я знаю, сколько времени может теряться, если читаешь код человека, который очень любит часто использовать конструкции вроде тех, о которых говорится в видео. По хорошему, код должен быть понятным даже программистам, не пишущим на питоне. Лучше набрать в полтора раза больше кода, чем потом тратить в три раза больше времени на его поддержку.
@@evgenyaa48 об этом много кто говорит, начиная от Брукса в его «Мифический человеко-месяц» 1975 года и позднее. То, что код должен быть читаемым и поддерживаемым - 100%, конечно. Не должно быть цели «написать меньше кода» и гори оно огнём, как там это будут поддерживать. Просто банальный hello world где-то 1 строка, а где-то 10, и это не может не влиять на продуктивность, даже если разработчик тратит 60% времени на обдумывание.
@@arknexter если сокращение встроено в язык, то это уже зависит не от разработчика, используют все и получается стандартизированный код, одинаковый у всех, что хорошо
@@MrAgilator у PHP тоже движение к строгой типизации. И в JS TypeScript присутствует. Лично я ничего плохого в этом не вижу. Стабильность строгой типизации + простота транслируемых языков, кмк хорошая связка.
Хороший вопрос - так хотели сделать в процессе обсуждения PEP, но решили отказаться от этого, чтобы не ломать общую концепцию видимости переменных в Python, которая LEGB. То есть name будет виден не только в блоке if, но и снаружи.
Это что мне теперь когда я пишу скрипт вызываемый из Lazarus не надо переключиться c ":=" на "=" ?))) А то прямо то забуду ":" в Lazarus, то наоборот приходится стирать ":" в Питоне)
@@avazart614 +1, вообще сразу покоробила его фраза, что "меньшее количество кода - это всегда хорошо". Фраза человека, которому, судя по всему, не приходилось никогда в жизни разбираться с чужим кодом, особенно с кодом такого вот оптимизатора-любителя, для которого чем меньше кода - тем лучше.
Все основные принципы, конечно, похожи, отличается синтаксис и детали. ORM - если ты знаешь, что это и как правильно использовать, нет разницы, пишешь ты на PHP, питоне, руби или джаве
Вот Вам омментарий: 4 месяца впустую считай. Ф строка: f"{n=}" - и мое сердце и пальцы перестали двигаться. 4 месяца впустую. Это как вычислять фибоначи от 10**10**10**10 без использования опиимизирующих алгоритмов. И ждать 200 лет, а не 2 минуты.
За обзор спасибо. Ну и что мы имеем на выходе? ну так чисто по философски. 1. лень написания кода заставляет нас двигаться к строчкам на ассемблере, ну разве что без сдвигов регистра. и как следствие... вы давно читали старо-славянские книги? там тоже из лучших побуждений буковки и слова меняли. а теперь требуется человек который сможет это перевести. 2. плодим в каждом языке несущественные изменения в синтаксисе, только потому, что его автор считает так лучше. Я напомню к чему привела нелюбовь дедушки Ленина к букве "Ё". мы до сир пор огребаем это с появлением БД в нотариате и в налоговых. появились фамилии Воробьев или Воробьёв. и это разные фамилии, люди вынуждены в суд обращаться из=за того что им детям поставили Ё или Е. В программировании это еще предстоит это в связи с частыми вводами и отказом поддерживать старый синтаксис. да блин никто не не переименовывает "самолет" во что то другое, потому что это вышло из моды или писать короче. 3. Имхо появление новых языков, и игра с синтаксисом, не более чем перетягивание комьюнити, которое ищет выхода творческой энергии. 4. ну и в подтверждение п.3. мы начинаем типизировать переменные. в языке с динамической типизацией.... Привет.... от чего ушли к тому пришли, ибо выяснилось что нестрогая или динамическая типизация хороша , пока это не программа, а скетч на неё и его легко обозреть, что в Питоне, что в Ноде. В своё время автокад в конце 80-х годов сделал революцию предложив архитектуру, позволявшая дополнять её пользователям. затем в 90-х наш любимый линукс, давший возможности всем внести вклад в общее дело. Ну и фотошоп и по миру понеслась идея, что широкая поддержка комьюнити залог развития программы. конечно и языки программирования не остались в стороне и мы счас при выборе (если он есть) выбираем для проекта где лучшая поддержка тем же самым сообществом. PS ну вот такое моё наблюдение. я только за изменения к лучшему и сбрасывание оков навязанных в своё время гигантами индустрии.
f-strings появились уже давно, это не фича 3.8, не пользуетесь ей? По сути это удобная замена для "{value}".format(value=some_var), вместо этого можно писат f"{some_var}". А новая фича удобна для отладки и логирования, вместо f"some_var={some_var}" можно писать f"{some_var=}".
Ого, задатки строгой типизации, так вот что значит " сначало заберите что было, а потом верните", пусть это не о питоне, а о другим языках, но тем не менее
print(f'{name=}') ??? ЭТО ВООБЩЕ ЗАКОННО???? теперь строки с логами для консоли будут great again)))) это же тупо в два раза сокращает длину строки в исходниках и уложиться в 120 символов рекомендованных в PEP8 станет в 2 раза проще)) пора плавно переходить на 3.8 ))
@@jascarkamasonskaja7314 согласен)) постоянно сталкиваюсь с тем, что нужно какую-то конкретную пару ключ:значение выводить для того чтоб вдруг чего баги отлавливать проще было)
До сих пор не понимаю, чем python лучше ruby, если завозимые фишки питона уже как годы существуют в ruby ... f' - интерполяция строк уже давно используется в ruby по типу #{var} type - в руби не нужно подключать дополнительно модули ни типы, ruby уже знает что 4 - это int, 'str' - это string ruby медленный, а python быстрее - twitter.com/mmmandel/status/1200585514463698944 )))) Холивары холиварами, главное чтобы инструментом было удобно пользоваться и он выполнял свои задачи !
Да, все языки и фреймворки друг у друга фичи переносят, кто-то что-то бодрое у себя внедрил - через год-два это уже у всех. Любой язык хорош, когда ты и твоя команда хорошо на нём пишет:)
Грустно, на самом деле, наблюдать куда идет язык: тайпинги начинали за здравие, а заканчивают за упокой (Я про всякие TypedDict, определение собственных типов и тд, чтобы линтер не ругался и точнее работал); @final, :Final, которые имеют разные написания и применение; @overload, который вообще меняет концепцию языка; дженерики, чтобы уложиться в тайпинги. Вроде бы и прикольно, но так глядишь через пару лет непонятно, а зачем питон нужен-то (хотя и сейчас вопрос открытый), если он дефакто становится строготипизированным (наверняка с докрученными тайпингами придет и повсеместное их использование как хороший тон). При этом питон все так же слаб как ООП язык и как язык для серьезных приложений, а с такими нововведениями неясно, зачем он, если есть условная джава, где все грабли уже пройдены, ФП уже есть, да и быстрее работает. Рано или поздно, кмк, тайпинги появятся и в рантайме (чтобы быстрее работало) и тогда вообще станет непонятно, а зачем он как язык нужен-то? При этом еще одна киллерфича питона - низкий порог вхождения, тоже постепенно исчезает, причем очень резко: условный студент пишет себе лабы, знать-не знает о том, что тайпинги существуют и вообще пишет все в одной функции, а потом приходит в реальный проект и видит линтер на линтере, перегрузку методов, модификаторы доступов и все это приправлено колхозностью реализации, костылями (Any) -> Any и т.д., т.к. на питоне так никто не привык писать и только пытаются найти как, собственно, надо. Вышел прям крик души :) Спасибо за видео, испугался знатно :)
demty123abc Условному студенту нормальные преподаватели надают по шапке за реализацию всего кода в одной функции. И если этот же студент идёт в питон из-за низкого порога вхождения и пугается типизации даже на уровне рекомендаций, а также боится таких элементарных составляющих ООП как перегрузка методов, то тут вопросы уже к самому разработчику, по-моему. Уж знать об их существовании программист должен, даже если основной его язык это Python.
@@seeyou7080 Ну уже появляется "нормальный" преподаватель, наверно и студент должен быть "нормальным" и т.д. Я вел к тому, что в питоне тайпинги - не обязательная часть языка и скорее всего никогда не будет таковой (ради обратной совместимости, простоты использования и тд), и мотивации учить как оно работает - особо нет, ведь и так работает, в то время как все то же самое в какой-нибудь джаве - часть языка и изучить ее без этого невозможно.
На самом деле релиз ужасный, ничего толкового не даёт, но добавляет сахара и читать код становиться сложнее. На async io писать вообще не возможно, дебажить сложно, ядра нормально не грузит, вообщем одна печаль
Мне нравится, как развивается asyncio в Python, все эти asyncio.run, сокрытие низкоуровневых методов, которыми надо раньше было пользоваться. И на aiohttp можно очень бодрые асинхронные веб-сервисы делать, или наоборот использовать aiohttp для параллельных запросов в кучу сервисов
@@t0digital Сам пишу на питоне 5 лет и очень его люблю, это скорее просто мои ощущения - Отлаживаться очень сложно, код избыточный и читать его стало сильно сложнее чем синхронный - Куча легаси и одноименных структур, к примеру есть два типа Future и один с другим работать не будет, если почитать кишки там еще много всякой черной магии и это пугает - Есть проблемы с ивент лупом, к примеру если создать пару ивент лупов и создать 1 таску, то дальше она сможем обрабатываться только тем ивент лупом который ее создал - Есть большие вопросы о том как правильно ловить исключения во вложенных корутинах, вообще обработка неявных исключений это просто боль при асинхронном программировании - По ощущениям люди пишут код дольше и ловят больше багов именно на асинхронном питоне - У себя в кампании заметил что рост производительности в проектах на бою не больше 30%, а сложностей возникает сильно больше - Как уже говорил, очень сложно заставить питон выжирать все ядра, с учетом что процессоры в последнее время растут именно ядрами, а не производительностью отдельных ядер, это становиться вообще печально Не то чтобы все что я написал делает невозможным писать код на asyncio, но в сухом остатке прирост небольшой, а приседаний много P.S По поводу 3.8 лучше бы нормальный switch case завезли)
Лично мне Java разработчику не нравится Python. Он какой то для меня беспорядочный. Где что хочешь объявляй, где что хочешь присваивай, все переменные пишутся без объявлении.
@@t0digital))) просто я в Java с 2004 года. И для меня раздражительно смотреть, что переменную объявили без типа...это уже рефлекторно в голове вопрос: эммм..так какого типа name? String, char, int, double, vectror, аа может Object? Да..еще..немного копался в python и заметил, он лучше справляется с аналитикой текстовых/строковых данных чем Java. К примеру с JSON или tuple arrays..
Мне кажется, в начале нулевых книжки были только по Java, PHP, немного Delphi и Visual Basic, питон совсем не в почёте был. Эх помню по бейсику такая синенькая была))
Я не хейчу - мне во многом нравится PHP, но есть вполне объективные минусы у PHP, так же как есть и вполне объективные минусы Python и любой другой технологии:)
Вот это нововведение... Проблема таких нововведений в том,что это костылии. Они не сделаны с помощью языка и не работают по его правилам. В том же haskell разные библиотеки могут работать совершенно по разному и ощущаться также совершенно по разному. При этом несмотря на наличие в языке костылей эти костыли подчиняются общим законам. Вот что значит хорошо спроектированный язык. А не то,что питон... Да и нововведения эти практически ничего не меняют...
не понимаю всех этих постоянных "нововеденний" на протяжении нескольких десятков лет когда в таких языках как ада или оберон все есть уже с самого начала.Сам начал как дурак учить программирование с питона пока не понял что все программироние на этом языке состои из постоянной возне в синтаксисе.
Это в питоне возня с синтаксисом, вы серьёзно? Банальный Hello World в питоне - 1 строка, в то время как в Java/C/Oberon - 5-11 строк. print("Hello World!") - это возня с синтаксисом? MODULE HelloWorld; IMPORT Out; BEGIN Out.String("Hello World!"); Out.Ln; END HelloWorld; а это не возня)?
@@t0digital когда программа на питоне достигает 10-15 тысяч строчек и надо что то изменить вся эта "скоропись" быстро аукается.Многие питон разработчики не могут разобраться даже в собственном написанном всего то 3 месяца назад коде.
@@snarksnark5038 наговнякать можно на любом языке, и на любом языке можно написать конфетку с очень приятной поддержкой кода в будущем, это не аргумент ни за питон, ни против
очень круто сделал отображение кода на экране!
Спасибо!
А как это делается?))
@@aziznadirov2911 режим наложения слоя Add в final cut
Ага! И подсветка нажатий клавиш тож норм.
Для тех, кто не понял, := это одновременно объявить и передать объект в качестве операнда. Раньше было так:
a = 5
if a > 10:
pass
Скоро станет так:
if a := 5 > 10:
pass
Да, спасибо!
Dalom к чему эти ужасные скобки?
@@Bobronium да действительно, сейчас чекнул, оказывается не нужно, спасибо.
Плохой оператор, смысл экономить 1 строку? Зато теперь менее очевидно
3:40 я думаю ты показал неудачный пример, так как это и раньше не работало. У тебя кейворд аргументы функции называются x, y. А ты в вызове пытаешься присвоить значение по имени a, b.
Тоже удивило
Ты прав, это ошибка
@@Lokamp_ спасибо!
Эх, медленно подписчики растут, похоже, пора пилить видео «самый лучший способ взломать Пентагон в 2019м», «как выучить Python за час», «как программисту заработать миллион» и «программируем утюг»:)
Ну, зависит от цели, которую ты преследуешь. Понабегут школьники миллионами, но ты потеряешь нас, своих любящих и любимых котанов... 🐈 🐈 🐈
Оу, только увидел, что так мало подписчиков... И правда, мало.
@@albertkaraev4686 а мне наоборот Котаны уши режет. Ламповости оно не добавляет, добавляет лишь "простачковость", и начисто убивает ореол "профессионала", конечно последующее повествование его восстанавливает, но начало смазывает. Это при всём при том что разказчик мне импонирует.
Мы не котаны, мы пайтоны́
@@nnkaz1k856 не думаю что я один такой
Мужик прошу продолжай!
Очень хорошо объясняешь!
Смотреть приятно
Спасибо за приятный отзыв! У меня вынужденный перерыв сейчас th-cam.com/channels/9MK8SybZcrHR3CUV4NMy2g.htmlcommunity?lb=UgzFaINd0XVEa-eF72R4AaABCQ
@@t0digital Поддержу. Легко заходит очень и интересно.
Хороший обзор фич! Благодарствую
Спасибо
:= и f'{name=}' вкатили.
Новые фишки конечно интересно, но как на счет оптимизации работы пайтона? В этом направлении ничего не меняется у него?
Кардинально с 3.8 ничего не поменяется. По моему опыту крайне редко всё упирается в производительность ЯП
@@avazart614 если бы был на 100% универсальный язык, все бы писали на нём, поэтому конечно сначала задача, потом язык. Но Python близок к универсальному, а узкие блоки кода, где нужна max производительность и где она проседает, можно переписать на C, не меняя остальной код приложения, то есть остальные 99%, написанного быстро на Python.
@@t0digital донести бы эти мысли моему шефу. Который после рукожопов понаписавших говнокод, как например 25000 SQL запросов для рендеринга одной страницы(и я не преувеличиваю((), решил на сях свою базу писать, потому что mysql слишком медленная....
Привет посоветуй твой топ книг по linux пожалуйста.
Круть, спасибо тебе большое!
Огромное спасибо за видео, всегда по дело у очень полезно!
спасибо за отзыв!
Да, новая фича с f-string мне понравилась.))
Четко!
Люблю твои видосы)
Спасибо крутой канал!!!!
Крутой канал, почему я раньше тебя не замечал?
Спасибо! Будет ещё много крутого:)
Привет! Нашёл тебя недавно. Классно и легко смотреть, спасибо за хороший звук и отсутствие "эммм" и прочего.
Имхо, можно так же в подобных видео добавлять чуть больше развёртывания, нежели "вот вам TypedDict”
Если глянуть твоё видео про работы со сложными структурами, можно сделать вывод, что typeddict - тоже самое, что и namedtuple, основываясь на примерах, которые ты приводишь. И может сложиться представление , что этот тип в 3.8 - бесполезен (да, да, все мы знаем, что ничего в языки программирования не добавляется просто так)((кроме очередной библиотеки в JS)). В то время как на самом-то деле разница есть.
Это просто обратная связь,не держи зла)
Спасибо за обратную связь, это очень ценно! «Кроме очередной библиотеки в JS» - оооо даааа, прекрасный дивный мир JS:)
Смысл подключать лишний модуль, если есть:
`requests.__version__`
(двойное нижнее подчеркивание)
Это регламентировано в каком-то PEP, не знаете? Все это поддерживают?
@@t0digital www.python.org/dev/peps/pep-0396/
@@NotHugs здОрово, спасибо!
Я правильно понимаю, что := передаёт булинговое значение?
Не обязательно булевое
Hello! One of your videos i sees book about linux, maybe some recipes. Can you tell me what kind a book was it?
Wow... Linux book... May be it was www.ozon.ru/product/linux-karmannyy-spravochnik-2-e-izdanie-148627162/?from=share_android
Linux Phrasebook, author is Scott Granneman
@@t0digital Yeah, it is she! Thank you:))
Спасибо! Ибо, познавательно и как всегда интересно ;-)
💪 спасибо!
Просто офигенные новшества! Circular dependency так и не пофиксили, что ограничивает строгую типизацию. Зато добавили бесполезный синтаксический сахар и какие-то старые фичи из других языков, называя всё это новшеством. Аналог TypedDict есть, например, в Angular. А, интересно, нормальный dependency injection в Python/Django где-нибудь есть? Модификатор final вообще порадовал! Я, конечно, новичок в Python, но я не знал, что он только сейчас появился!
* «Circular dependency так и не пофиксили» наличие проблем с Circular dependency в коде говорит о его плохой архитектуре, а о не минусе языка, на котором код написан. Язык просто не позволяет сделать вам херовые вещи и это хорошо.
* «Зато добавили бесполезный синтаксический сахар» бесполезного никто нигде ничего не внедряет, ни в одном ЯП нет бесполезных вещей. Если вы не можете найти применение чему-то, это говорит о вашем непонимании инструмента и целей его внедрения - и ни о чём больше это не говорит.
* «Аналог TypedDict есть, например, в Angular» сравнивать ЯП и фреймворк это как сравнивать двигатель автомобиля и готовый автомобиль
* «А, интересно, нормальный dependency injection в Python/Django где-нибудь есть» - вы уверены, что знаете, что это такое? В любом ЯП, где есть объекты и конструкторы, реализуется DI.
* «Модификатор final вообще порадовал» - декоратор final отлично решает свою задачу, да.
Где тут плохой код?
import abc
class IHandler:
@abc.abstractmethod
def handle(self, message: str, ws_manager: WebSocketManager) -> str:
pass
class HandlerImpl(IHandler):
def handle(self, message: str, ws_manager: WebSocketManager):
ws_manager.send(message)
class WebSocketManager:
handler: IHandler
def __init__(self):
self.handler = HandlerImpl()
def on_message(self, message: str):
self.handler.handle(message, self)
def send(self, message):
print(message)
ws_mgr = WebSocketManager()
ws_mgr.on_message('my message')
Ладно не буду мучить. Сам уже допёр. Можешь не читать, если охота самому подумать. Там вместо WebSocketManager нужно передавать тип IWebSocketManager, то есть его абстрактный класс.
Брр, произношение вводит в ступор
Вещи дядька говорит, придётся подписаться.
Спасиб:)
Подписка: отличная подача, код крутой сбоку да и лайк заодно
Спасибо!
Как на счет Label под видео для ранжирования аудитории? Это видео полезно - всем , начинающим, средней руки и т/п
Потом какие-нибудь трюки языка для решения интересных или стандартных задач не очевидным способами.
Ну и иногда хайповать интересными проектами Python + ML, но из разряда - это просто, тут сложнее, а это все вроде знают , но допускают кучу ошибок.
Я думал об этом, но пока не пришёл к тому, как это лучше и правильнее сделать. Пока бью по плейлистам
А теперь давайте сравним первый пример с аналогичным фрагментом на CoffeeScript. Допустим, у нас уже определены функции first и second. А они, конечно, определены потому что нужны постоянно:
first = (arr) -> arr[0]
second = (arr) -> arr[1]
Так же сокращения:
cl = console .log и to_arr = Array .from
И вжжжух! никаких лишних скобок:
hello = 'Hello, cat!'
cl name if name = second first to_arr hello .matchAll /, (.*)/g
Почему нельзя обойтись одним '=' ?
В какой версии python уберут отступы?
Надо просто подождать. Фичу, присутствующую в языке с самых первых версий, обязательно уберут. Обязательно.
идея для будущих видосов... написание реальной библиотеки... со всем процессом.. билд, тестирование, можно CI захватить... и т.д.
На какой минуте про уход Гуидо?
Хорошее видео, но у меня вопрос совсем не по пайтону.
Как ты сделал, чтобы текст из консоли чисто выводился на видео без самой консоли?)
Режим наложения слоя с терминалом Add в final cut, есть такое же в любой монтажке. Чёрный фон терминала и почти чёрный фон видео в этом месте дают такой эффект
@@t0digital не в любой монтажке, поэтмоу и спросил) Спасибо, интересный трбк, надо будет опробовать
@@vladyslavstadnyk2762 в премьере точно есть:)
Тю. А в пыхе испокон веков объявить и передать объект в качестве операнда без никаких "моржей" :)
Правильно понимаю, что если a = b то переменной a присваивается ссылка на область памяти в которой хранится значение переменной b. А если a := b, то под переменную a выделяется новая область памяти куда копируется значение из b или это не так и смысл := в чем-то другом?
С точки зрения работы по ссылкам в := все аналогично простому =. В a := b просто происходит проверка значения b на трушность, если b трушна, то a присваивается ссылка на область памяти, в которой хранится b.
класс)
Меньшее количество кода далеко не всегда хорошо.
Согласно исследованиям количество кода, которое девелопер пишет за день, примерно одинаково для разных языков и технологий. Поэтому если для решения задачи на условном питоне надо написать тысячу строк кода, а на условной Java 2 тысячи строк, то это вполне может означать, что Python команда может сделать проект не за 2 года, а за 1 год - и это весомо. Не думаю, что корреляция настолько явная, но что она есть - факт неоспоримый, чем меньше кода надо писать для решения задачи, тем быстрее задача делается. В случае адекватного pythonic кода он остаётся лаконичным и выразительным => поддерживаемым.
@@t0digital ещё бы пруфы на исследования, было бы чудесно. Не припомню таких проектов, где именно набрать код было бы проблемой. Большую часть времени приходится тратить на продумывание, курение доков и прочие штуки. Если бы я сидел и набирал код даже 50-60% времени, то мог бы вполне оправдано называться машинистом.
А ещё я знаю, сколько времени может теряться, если читаешь код человека, который очень любит часто использовать конструкции вроде тех, о которых говорится в видео. По хорошему, код должен быть понятным даже программистам, не пишущим на питоне. Лучше набрать в полтора раза больше кода, чем потом тратить в три раза больше времени на его поддержку.
@@evgenyaa48 об этом много кто говорит, начиная от Брукса в его «Мифический человеко-месяц» 1975 года и позднее. То, что код должен быть читаемым и поддерживаемым - 100%, конечно. Не должно быть цели «написать меньше кода» и гори оно огнём, как там это будут поддерживать. Просто банальный hello world где-то 1 строка, а где-то 10, и это не может не влиять на продуктивность, даже если разработчик тратит 60% времени на обдумывание.
@@channelname501 что именно?
@@arknexter если сокращение встроено в язык, то это уже зависит не от разработчика, используют все и получается стандартизированный код, одинаковый у всех, что хорошо
Я и забыл уже, что такое присвоение имело место быть.
Мде, нормальный оператор этот в итоге :=, и че все орали не разобравшись.
Python переоткрывает С++ :)
Да, такое же впечатление сложилось )) Движение к строгой типизации?
Свят, свят!!
@@MrAgilator у PHP тоже движение к строгой типизации. И в JS TypeScript присутствует. Лично я ничего плохого в этом не вижу. Стабильность строгой типизации + простота транслируемых языков, кмк хорошая связка.
@@justkrybik А Java считается строгой типизации?
Сделано хорошо, я Python не знаю, но было интересно. Местами похоже на Ruby.
2:59 про оператор ":=" : получается name будет в области видимости только блока if ?
Хороший вопрос - так хотели сделать в процессе обсуждения PEP, но решили отказаться от этого, чтобы не ломать общую концепцию видимости переменных в Python, которая LEGB. То есть name будет виден не только в блоке if, но и снаружи.
Дико извиняюсь, но у вас там опечатка, там должно быть
"... Андрей"
Ред: 1:45 тут
возмоооожно:)!
Я только начал изучать пайтон ещё не дорос до данного видоса )
Это что мне теперь когда я пишу скрипт вызываемый из Lazarus не надо переключиться c ":=" на "=" ?))) А то прямо то забуду ":" в Lazarus, то наоборот приходится стирать ":" в Питоне)
Спасибо, позновательно. Мне больше всего понравился оператор :=, давно хотелось чего-то такого.
@@avazart614 +1, вообще сразу покоробила его фраза, что "меньшее количество кода - это всегда хорошо". Фраза человека, которому, судя по всему, не приходилось никогда в жизни разбираться с чужим кодом, особенно с кодом такого вот оптимизатора-любителя, для которого чем меньше кода - тем лучше.
final - как в java
f-string - отличная фича; надеюсь в JS примут во внимание :) а то сниппетом вбивать `${JSON.stringify({varName})}` тоже вариант, но не изящный...
":=" неееееееееееееее!
Когда я жил в Москве, у меня была такая же кружка и она была такая же черная внутри от чая ))
Периодически она моется, да:)))
@@t0digital да просто цвет такой, что мой не мой, все равно будет черная )) Кстати, видосики у тебя классные!
@@0day694 спасибо 🙏!
Рубишная сокращёнка, запашок от Тайпскрипт... Весело
Все языки и фреймворки хорошие идеи дёргают друг у друга. Эволюция. Если разобраться, то и руби с TS до фига позаимствовали от других - это нормально
@@t0digital скоро в вакансиях будут требовать прямым текстом знание всего и вся... Ну а что, всё ж похоже))
Все основные принципы, конечно, похожи, отличается синтаксис и детали. ORM - если ты знаешь, что это и как правильно использовать, нет разницы, пишешь ты на PHP, питоне, руби или джаве
Оч и оч круто
Вот Вам омментарий: 4 месяца впустую считай. Ф строка: f"{n=}" - и мое сердце и пальцы перестали двигаться.
4 месяца впустую.
Это как вычислять фибоначи от 10**10**10**10 без использования опиимизирующих алгоритмов.
И ждать 200 лет, а не 2 минуты.
ТайпинХ?
странно зачем надо было добавлять := , можно ведь было просто семантику и синтаксис = поменять(расширить), и сделать как у :=
Явное лучше неявного, := делает не то же самое, что просто =
Почему так мало по golang
Возможно со временем затронем и golang
гительман из мира айти
За обзор спасибо.
Ну и что мы имеем на выходе? ну так чисто по философски.
1. лень написания кода заставляет нас двигаться к строчкам на ассемблере, ну разве что без сдвигов регистра. и как следствие... вы давно читали старо-славянские книги? там тоже из лучших побуждений буковки и слова меняли. а теперь требуется человек который сможет это перевести.
2. плодим в каждом языке несущественные изменения в синтаксисе, только потому, что его автор считает так лучше. Я напомню к чему привела нелюбовь дедушки Ленина к букве "Ё". мы до сир пор огребаем это с появлением БД в нотариате и в налоговых. появились фамилии Воробьев или Воробьёв. и это разные фамилии, люди вынуждены в суд обращаться из=за того что им детям поставили Ё или Е.
В программировании это еще предстоит это в связи с частыми вводами и отказом поддерживать старый синтаксис. да блин никто не не переименовывает "самолет" во что то другое, потому что это вышло из моды или писать короче.
3. Имхо появление новых языков, и игра с синтаксисом, не более чем перетягивание комьюнити, которое ищет выхода творческой энергии.
4. ну и в подтверждение п.3. мы начинаем типизировать переменные. в языке с динамической типизацией.... Привет.... от чего ушли к тому пришли, ибо выяснилось что нестрогая или динамическая типизация хороша , пока это не программа, а скетч на неё и его легко обозреть, что в Питоне, что в Ноде.
В своё время автокад в конце 80-х годов сделал революцию предложив архитектуру, позволявшая дополнять её пользователям. затем в 90-х наш любимый линукс, давший возможности всем внести вклад в общее дело. Ну и фотошоп и по миру понеслась идея, что широкая поддержка комьюнити залог развития программы. конечно и языки программирования не остались в стороне и мы счас при выборе (если он есть) выбираем для проекта где лучшая поддержка тем же самым сообществом.
PS ну вот такое моё наблюдение. я только за изменения к лучшему и сбрасывание оков навязанных в своё время гигантами индустрии.
TypedDict forewa!
4:20 Я чето вообще эту фичу...как и все с ней связанное не понял- сам синтаксис конструкции, ее суть (Ф...что то там, вместо обычного принта)
f-strings появились уже давно, это не фича 3.8, не пользуетесь ей? По сути это удобная замена для "{value}".format(value=some_var), вместо этого можно писат f"{some_var}".
А новая фича удобна для отладки и логирования, вместо f"some_var={some_var}" можно писать f"{some_var=}".
Ого, задатки строгой типизации, так вот что значит " сначало заберите что было, а потом верните", пусть это не о питоне, а о другим языках, но тем не менее
все к этому приходят - TypeScript в JS, type hinting в PHP и Python:)
А как же shared memory?
Да, крутая штука для тех, кто использует multiprocessing. Но мы с asyncio пишем, вычислительные задачи не параллелим
print(f'{name=}') ??? ЭТО ВООБЩЕ ЗАКОННО???? теперь строки с логами для консоли будут great again)))) это же тупо в два раза сокращает длину строки в исходниках и уложиться в 120 символов рекомендованных в PEP8 станет в 2 раза проще)) пора плавно переходить на 3.8 ))
Дааа, дико кайфанул с этой штуки. Да, синтаксический сахар, но очень вкусный :)
Диджитализируй! АйТи студия вот бы они такую фичу с диктами замутили)))))
@@jascarkamasonskaja7314 согласен)) постоянно сталкиваюсь с тем, что нужно какую-то конкретную пару ключ:значение выводить для того чтоб вдруг чего баги отлавливать проще было)
есть для отладки модуль q - удобный
th-cam.com/video/OL3De8BAhME/w-d-xo.html
Теперь пили видео как апдейтить питон)))
Из исходников собирается так же, как и другие версии - вот тут показывал th-cam.com/video/FLiKTJqyyvs/w-d-xo.html
Не понял, в Питоне появилось явное определение типа? Всё, крандец Аде... Пошёл рыдать.
Что есть явное определение типа? В питоне появились тайп хинты, то есть подсказки IDE по типам
Питон под андроид возможно и как?))
В Android терминале в Termux отлично работает Python даже 3.8
Ищи приложение Pydroid
Ну что-то Гвидо уже какой раз вроде всё, да не всё ;) Я правильно понял, что все нововведения - по сути синтаксический сахар?
Имхо final, новые типы в typing и тп это не сахар. Изменения в f-string, walrus это сахарок, да:)
Я не понимаю, ну на хрена := это надо, чем вам обычное = не нравится? Кто-нибудь знает, обычное = в 3.8 работает?
Это работает в 3.8, как и раньше:
a = 38
Что ли пайтон изучить...
Убеждаюсь , что Java ЯП для того чтоб знать ЯП , а Python - ЯП для того чтоб быстро решать задачи
До сих пор не понимаю, чем python лучше ruby, если завозимые фишки питона уже как годы существуют в ruby ...
f' - интерполяция строк уже давно используется в ruby по типу #{var}
type - в руби не нужно подключать дополнительно модули ни типы, ruby уже знает что 4 - это int, 'str' - это string
ruby медленный, а python быстрее - twitter.com/mmmandel/status/1200585514463698944 ))))
Холивары холиварами, главное чтобы инструментом было удобно пользоваться и он выполнял свои задачи !
Да, все языки и фреймворки друг у друга фичи переносят, кто-то что-то бодрое у себя внедрил - через год-два это уже у всех. Любой язык хорош, когда ты и твоя команда хорошо на нём пишет:)
Диджитализируй! АйТи студия все верно, спасибо за интересный контент )) 👌👌👌
До сих пор не понимаю зачем и как мерить какой язык лучше...
никуя не понял, но очень интересно
Грустно, на самом деле, наблюдать куда идет язык: тайпинги начинали за здравие, а заканчивают за упокой (Я про всякие TypedDict, определение собственных типов и тд, чтобы линтер не ругался и точнее работал); @final, :Final, которые имеют разные написания и применение; @overload, который вообще меняет концепцию языка; дженерики, чтобы уложиться в тайпинги.
Вроде бы и прикольно, но так глядишь через пару лет непонятно, а зачем питон нужен-то (хотя и сейчас вопрос открытый), если он дефакто становится строготипизированным (наверняка с докрученными тайпингами придет и повсеместное их использование как хороший тон). При этом питон все так же слаб как ООП язык и как язык для серьезных приложений, а с такими нововведениями неясно, зачем он, если есть условная джава, где все грабли уже пройдены, ФП уже есть, да и быстрее работает.
Рано или поздно, кмк, тайпинги появятся и в рантайме (чтобы быстрее работало) и тогда вообще станет непонятно, а зачем он как язык нужен-то?
При этом еще одна киллерфича питона - низкий порог вхождения, тоже постепенно исчезает, причем очень резко: условный студент пишет себе лабы, знать-не знает о том, что тайпинги существуют и вообще пишет все в одной функции, а потом приходит в реальный проект и видит линтер на линтере, перегрузку методов, модификаторы доступов и все это приправлено колхозностью реализации, костылями (Any) -> Any и т.д., т.к. на питоне так никто не привык писать и только пытаются найти как, собственно, надо.
Вышел прям крик души :) Спасибо за видео, испугался знатно :)
demty123abc Условному студенту нормальные преподаватели надают по шапке за реализацию всего кода в одной функции. И если этот же студент идёт в питон из-за низкого порога вхождения и пугается типизации даже на уровне рекомендаций, а также боится таких элементарных составляющих ООП как перегрузка методов, то тут вопросы уже к самому разработчику, по-моему. Уж знать об их существовании программист должен, даже если основной его язык это Python.
@@seeyou7080 Ну уже появляется "нормальный" преподаватель, наверно и студент должен быть "нормальным" и т.д. Я вел к тому, что в питоне тайпинги - не обязательная часть языка и скорее всего никогда не будет таковой (ради обратной совместимости, простоты использования и тд), и мотивации учить как оно работает - особо нет, ведь и так работает, в то время как все то же самое в какой-нибудь джаве - часть языка и изучить ее без этого невозможно.
Спасибо за обзор.
:= дам 6 балов из 10
Ну а в целом, какая-то унылая обнова по сравнению с 3.7
А что в 3.7 было?
@@ИванИванов-н9т9ъ ну как минимум
asyncio.run
python-scripts.com/python-3-7#asyncio-face-lift
Добрый день! Немного понял, но это по причине того, что я ламер :-)
А кто такие "катаны"? По японской кружке навеивает однокоренное слово - катана
Привет! Котаны:)
Лойс
Не морочте голову людям своим Питоном и учите Перл, ибо в нем вся сила, коей нет в вашем тормознутом, ограниченном Пайтоне.
Ну да ну да, перл, ага
На самом деле релиз ужасный, ничего толкового не даёт, но добавляет сахара и читать код становиться сложнее. На async io писать вообще не возможно, дебажить сложно, ядра нормально не грузит, вообщем одна печаль
Мне нравится, как развивается asyncio в Python, все эти asyncio.run, сокрытие низкоуровневых методов, которыми надо раньше было пользоваться. И на aiohttp можно очень бодрые асинхронные веб-сервисы делать, или наоборот использовать aiohttp для параллельных запросов в кучу сервисов
@@t0digital
Сам пишу на питоне 5 лет и очень его люблю, это скорее просто мои ощущения
- Отлаживаться очень сложно, код избыточный и читать его стало сильно сложнее чем синхронный
- Куча легаси и одноименных структур, к примеру есть два типа Future и один с другим работать не будет, если почитать кишки там еще много всякой черной магии и это пугает
- Есть проблемы с ивент лупом, к примеру если создать пару ивент лупов и создать 1 таску, то дальше она сможем обрабатываться только тем ивент лупом который ее создал
- Есть большие вопросы о том как правильно ловить исключения во вложенных корутинах, вообще обработка неявных исключений это просто боль при асинхронном программировании
- По ощущениям люди пишут код дольше и ловят больше багов именно на асинхронном питоне
- У себя в кампании заметил что рост производительности в проектах на бою не больше 30%, а сложностей возникает сильно больше
- Как уже говорил, очень сложно заставить питон выжирать все ядра, с учетом что процессоры в последнее время растут именно ядрами, а не производительностью отдельных ядер, это становиться вообще печально
Не то чтобы все что я написал делает невозможным писать код на asyncio, но в сухом остатке прирост небольшой, а приседаний много
P.S
По поводу 3.8 лучше бы нормальный switch case завезли)
Лично мне Java разработчику не нравится Python. Он какой то для меня беспорядочный. Где что хочешь объявляй, где что хочешь присваивай, все переменные пишутся без объявлении.
Python: name = "Привет"
Java: String name = "Привет";
Разница столь огромна и версия Java вам нравится больше:)?
@@t0digital))) просто я в Java с 2004 года. И для меня раздражительно смотреть, что переменную объявили без типа...это уже рефлекторно в голове вопрос: эммм..так какого типа name? String, char, int, double, vectror, аа может Object?
Да..еще..немного копался в python и заметил, он лучше справляется с аналитикой текстовых/строковых данных чем Java. К примеру с JSON или tuple arrays..
Так же лучше делает аналитику, чем SQL Analytics..ну может на равне.
Я помню в начале 2000 годов ходил в магазин покупать книги по программированию. Тогда книжки по Питон пыльные лежали на полке. Никто не интересовался.
Мне кажется, в начале нулевых книжки были только по Java, PHP, немного Delphi и Visual Basic, питон совсем не в почёте был. Эх помню по бейсику такая синенькая была))
и эти люди ругают PHP :-) рука лицо. я не про Вас лично. я про питонистов, которые вечно хейтят PHP )))
Я не хейчу - мне во многом нравится PHP, но есть вполне объективные минусы у PHP, так же как есть и вполне объективные минусы Python и любой другой технологии:)
А я могу зарабатывать на фрилансе, если у меня тока телефон и клавиатура,просто у меня пк здох
можете)
@@t0digital другие говорят что нельзя пррграммировать на веб)
@@legendabs1110 если они запрещают, то нельзя, конечно:))) а если они в целом не против, то можно попробовать
Вот это нововведение...
Проблема таких нововведений в том,что это костылии.
Они не сделаны с помощью языка и не работают по его правилам.
В том же haskell разные библиотеки могут работать совершенно по разному и ощущаться также совершенно по разному.
При этом несмотря на наличие в языке костылей эти костыли подчиняются общим законам.
Вот что значит хорошо спроектированный язык.
А не то,что питон...
Да и нововведения эти практически ничего не меняют...
Что именно является костылём из новинок в 3.8?
Сокращение f'{name=}' вместо f'name={name}' :)?
Или новые типы для линтеров?
не понимаю всех этих постоянных "нововеденний" на протяжении нескольких десятков лет когда в таких языках как ада или оберон все есть уже с самого начала.Сам начал как дурак учить программирование с питона пока не понял что все программироние на этом языке состои из постоянной возне в синтаксисе.
Это в питоне возня с синтаксисом, вы серьёзно? Банальный Hello World в питоне - 1 строка, в то время как в Java/C/Oberon - 5-11 строк.
print("Hello World!") - это возня с синтаксисом?
MODULE HelloWorld;
IMPORT Out;
BEGIN
Out.String("Hello World!");
Out.Ln;
END HelloWorld;
а это не возня)?
@@t0digital когда программа на питоне достигает 10-15 тысяч строчек и надо что то изменить вся эта "скоропись" быстро аукается.Многие питон разработчики не могут разобраться даже в собственном написанном всего то 3 месяца назад коде.
@@snarksnark5038 наговнякать можно на любом языке, и на любом языке можно написать конфетку с очень приятной поддержкой кода в будущем, это не аргумент ни за питон, ни против
Хоть питон и компактный язык , но бля над ним еще столько работать , конкретики в нем точно не хватает
оО конкретики это как)? В любом ЯП все выражения на 100% конкретны, потому что делают вполне чётко прописанные действия
Это не python, это хрень.
Где)?
@@t0digital это не синтаксис пятона
Согласен, это не пятон)