Python Clinic
Python Clinic
  • Видео 44
  • Просмотров 96 287
Анализ данных на Python (pandas, matplotlib): кто имел больше шансов выжить на Титанике
Смотрим на известный датасет исторических данных о катастрофе на Титанике, который можно найти здесь - www.kaggle.com/competitions/titanic
Таймкоды:
00:00 - обзор датасета и гипотеза
03:03 - основы pandas
05:33 - средние цены на билеты
07:24 - классы билетов
08:26 - нехватка данных
09:28 - удаляем "плохие" записи
09:48 - дополняем "плохие" записи
11:47 - распределение цен
15:45 - группировка по классу, возрасту и полу
16:43 - простой вывод
Просмотров: 393

Видео

Пишем доморощенный веб сервер на Python
Просмотров 5693 месяца назад
в этом видео я опишу процесс создания и работы очень простенького веб сервиса с помощью модуля socket
Деревья на Python: бинарное дерево поиска (BST), красно-чёрное (BRT)
Просмотров 7164 месяца назад
Разбираемся с тем, как устроены разные виды деревьев и конечно же реализуем их на Python. Таймкоды: 00:00 - задача о директориях 04:24 - решаем через дерево 08:58 - определения и термины 16:25 - простейшее дерево 19:51 - бинарное дерево поиска 25:18 - реализация бинарного дерева поиска 30:11 - кривое дерево 38:00 - красно-чёрное дерево 45:20 - повороты 48:36 - алгоритм вставки 55:15 - уже не та...
Как устроены хэш таблицы и словари на примере Python (hash table / dict)
Просмотров 1,3 тыс.6 месяцев назад
Что там под капотом у типа dict? Что такое хэш функция? Можно ли избежать коллизий? Ответы в этом видео. Мы продолжаем разбираться со структурами данных на примере Python, как всегда, если у вас есть вопросы или предложения, смело пишите обо всём в комментариях. Таймкоды: 00:00 - подсчёт слов в тексте двойным циклом 01:59 - вариации подсчёта через словарь 08:36 - устройство хэш таблицы и хэш фу...
Стек/stack и очередь/queue в PYTHON
Просмотров 1,4 тыс.8 месяцев назад
Привет, в этом видео я расскажу о двух структурах данных, которые лежат в основе самого программирования, это stack/стек и queue/очередь. Посмотрим на разные реализации в Python, на задачи с интервью и практические примеры. Как всегда можете смело задавать вопросы в комментариях. 00:00 - задача с интервью 03:12 - решение с “депо” 10:54 - stack/стек 11:53 - queue/очередь 12:50 - формальный интер...
Большое О - ассимптотическая оценка сложности алгоритмов
Просмотров 1,5 тыс.9 месяцев назад
При проектировании решений мы стремимся к максимальной эффективности. Понимание сложности алгоритмов и умение их сравнивать критически важно для подбора наиболее эффективного решения, поэтому понимать принципы ассимптотической оценки - очень важно. Даже если вы считаете, что все алгоритмы уже написаны, а chatGPT подскажет решение в любой ситуации. Таймкоды: 00:00 - пример вопроса с интервью и к...
РеКуРсИя в Python (стэк вызовов, оптимизация хвоста и альтернативы)
Просмотров 99710 месяцев назад
Чтобы понять рекурсию, нужно понимать рекурсию, пока не поймёшь рекурсию. Тайм коды: 00:00 - интро 00:25 - что считать рекурсией 03:38 - сквозная сумма списка 08:11 - стэк вызовов 17:58 - хвосты и оптимизация 23:15 - Гвидо не хотел оптимизировать 26:13 - немного о быстродействии и удобстве 28:35 - замена на очередь 33:50 - ну и всё
Приципы SOLID и PYTHON - подробный разбор на практике
Просмотров 3,7 тыс.11 месяцев назад
Давно обещал выпустить это видео, и вот время пришло. Здесь будет подробный разбор применения техник SOLID в Python. Пример, как и само видео, будет достаточно сложным, так что не переживайте, если не получится всё это ухватить с первого раза, ну и не стесняйтесь задавать вопросы в комментариях. Так же в конце есть небольшая секция, где я делюсь своими мыслями о будущем этого канала. Таймкоды: ...
Методы классов в Python
Просмотров 1,5 тыс.Год назад
Объясняю в чём разница между classmethod и staticmethod в python, и немного рассказываю о том, где эти декораторы применяются, а где можно обойтись и без них. Вообще пайтон настолько гибкий, что в целом без них моджнобыло бы обойтись везде, но они дают нам немного дополнительного контроля над тем, как и где эти методы вызываются и переопределяются. Таймкоды: 00:00 - интро 00:22 - методы класса ...
Асинхронность в python
Просмотров 4,2 тыс.Год назад
Рассказываю о том, что вообще такое асинхронность, и как она реализована в python. Видео получилось очень поучительным, сразу понятно, что асинхронность это не серебряная пуля, а скорее осиновый кол, который нужно долго и методично строгать перед использованием. Таймкоды: 00:00 - интро 00:15 - что вообще такое асинхронность 07:20 - многопоточность? 09:02 - async 11:47 - await 13:28 - asyncio 15...
Абстрактные классы в Python
Просмотров 4,2 тыс.Год назад
Разбираемся с тем, как работает abstract base class или abc. Абстрактные классы позволяют в явном виде заставить дочерние классы переопределять поведения родителей, за счёт этого мы можем строить более гибкие иерархии наследования. Таймкоды: 00:00 - интро 01:06 - интерфейсы 04:17 - абстрактные классы 05:33 - необходимые инструменты 09:16 - расширяем дочерние классы 10:55 - результат 11:59 - аутро
Потоки ненастоящие? GIL в Python
Просмотров 1,8 тыс.Год назад
В этом видео мы разоблачим иллюзию относительно быстроты работы потоков в Python. GIL превращает все объекты в потокобезопасные, но платим за это мы производительностью, и на самом деле потоки очень редко работают по-настоящему параллельно. Разбираемся, в каких ситуациях их можно использовать с выгодой. Канал в тг, где я делюсь своими мыслями по видосам и не только - t.me/PythonClinicChnl Таймк...
Множественное наследование и алгоритм MRO в Python
Просмотров 2,2 тыс.Год назад
Пришло время поговорить о множественном наследовании в Python. Проблема множественного наследования на концептуальном уровне это конфликты. В пайтон они разрешаются с помощью алгоритма MRO, который стоит понимать, с тем чтобы правильно строить иерархии наследования и переиспользовать родительское поведение. Так же коротко рассказываю о принципе работы метода super(). Таймкоды: 00:00 - проблема ...
Потоки в Python
Просмотров 1,4 тыс.Год назад
Смотрим на интерфейс работы с потоками и сравниваем его с аналогичными инструментами для процессов. Заодно проверили и производительность тоже. Основной вывод - потоки (в Python и по жизни) стоит использовать для распараллеливания простейших задач, либо вещей которые зависят от IO. Для сложных вычислений лучше использовать всё же процессы. Группа в тг - t.me/PythonClinicChnl Таймкоды: 00:00 - и...
Механизм наследования в Python
Просмотров 1,2 тыс.Год назад
Как и всегда нас будет интересовать то, что происходит при наследовании под капотом - как работает типизация, как происходит "перенос" атрибутов и методов, как мы можем расширять поведение дочерних классов. Даже в простейшем случае линейного наследования можно поломать механику работы с проперти, если не соблюсти определённые правила, которые как раз зависят от этой механики. Канал в тг, где я ...
Борьба за ресурсы между процессами Python
Просмотров 594Год назад
Борьба за ресурсы между процессами Python
Подходы eafp и lbyl на примере Python
Просмотров 653Год назад
Подходы eafp и lbyl на примере Python
Коммуникация между процессами в Python
Просмотров 727Год назад
Коммуникация между процессами в Python
Разбор байткода Python с помощью модуля dis
Просмотров 712Год назад
Разбор байткода Python с помощью модуля dis
Pool процессов в Python - параллельность и асинхронность
Просмотров 1,8 тыс.Год назад
Pool процессов в Python - параллельность и асинхронность
Дескрипторы в Python - максимальная инкапсуляция
Просмотров 3,1 тыс.Год назад
Дескрипторы в Python - максимальная инкапсуляция
Основы работы с процессами в Python
Просмотров 1,5 тыс.Год назад
Основы работы с процессами в Python
Компиляторы, интерпретаторы и когда всё-таки интернируются строки
Просмотров 1 тыс.Год назад
Компиляторы, интерпретаторы и когда всё-таки интернируются строки
Сборка мусора (garbage collection) в Python
Просмотров 4 тыс.Год назад
Сборка мусора (garbage collection) в Python
Properties в Python - во-первых это красиво
Просмотров 1,9 тыс.Год назад
Properties в Python - во-первых это красиво
Python не тратит ни одного лишнего байта
Просмотров 1,8 тыс.Год назад
Python не тратит ни одного лишнего байта
ОГРОМНЫЙ обзор и сравнение PyCharm и Visual Studio Code
Просмотров 12 тыс.Год назад
ОГРОМНЫЙ обзор и сравнение PyCharm и Visual Studio Code
Изменяемость объектов с точки зрения управления памятью в Python
Просмотров 1,5 тыс.Год назад
Изменяемость объектов с точки зрения управления памятью в Python
Инкапсуляция в Python (и не только)
Просмотров 1,3 тыс.Год назад
Инкапсуляция в Python (и не только)
Управление памятью в Python
Просмотров 8 тыс.Год назад
Управление памятью в Python

Комментарии

  • @sergeyeliseev4896
    @sergeyeliseev4896 2 дня назад

    Спасибо. Лучший канал по питону. Надеюсь канал не заброшен

  • @ix3909
    @ix3909 3 дня назад

    Люблю использовать ленивые вычисления, когда нужно сделать возврат результата из api: list_users = api.get_users() return list_users or [] Или, когда нужно вернуть только первый элемент: return list_users and list_users[0]

  • @anndreiko
    @anndreiko 9 дней назад

    Спасибо большое. Довольно чёткое объяснение сложной темы! Я всё понял) Но остался вопрос. Сам Асинхронный код не сильно нагружает программу? Если тяжёлый юзер интерфейс сделать асинхронным, он для процессора станет проще? Для юзера то станет. Вот я к чему)

    • @pythonclinic
      @pythonclinic 7 дней назад

      не, железу проще не станет) наоборот, придётся что-то делать вместо тупого ожидания ответа

    • @anndreiko
      @anndreiko 6 дней назад

      @@pythonclinic т.е. получается асихронность не удел слабых ПК? Понятно) Спасибо за ответ!)

  • @Xmike499-
    @Xmike499- 11 дней назад

    еее, бороду отрастил, взгляд у тебя стал строже XD. Cпасибо за видео

  • @evgenyk6449
    @evgenyk6449 20 дней назад

    Суперполезное видео, спасибо. Продолжения нет?

  • @МаксимНовиков-ь4ц
    @МаксимНовиков-ь4ц 21 день назад

    Посмотрел весь цикл роликов, большое спасибо, много довольно подробной информации. Редко можно увидеть столько деталей. Про многопроцессорность вроде понятно. Но можно и отдельным процессом отправить запрос, верно? Наверное, очень затратно создавать его для такой пустяковой задачи.. Но а как же многопоточность? Можно же её применить для этих целей. Хотелось бы увидеть сравнительно видео, где все таки лучше применить тот или иной способ(многопоточность/многопроцессорность/асинхронность) И также интересно узнать как применить подобное ускорение на запросы к БД(видимо лучше с этим справяться потоки, но хотелось бы увидеть этот разбор)

    • @pythonclinic
      @pythonclinic 20 дней назад

      насчёт процесса - да, это не очень рационально с точки зрения расхода ресурсов на создание и убийство нового процесса отдельные процессы лучше всего применять для отделения сложных с точки зрения cpu задач, например, рендеринг сотен часов видео без участия пользователя; многопоточность хорошо подходит для связанных между собой задач, например рендеринг пары часов видео- и звуковых дорожек по общим исходникам (тоже без участия пользователя), а асинхронность можно добавлять есть есть i/o операции или попросту интерфейс пользователя, при жедании можно скомбинировать асинхронность с любым из предыдущих примеров, будет ренедеринг видео с возможностью вывода прогресса на интерфейс так чтобы он не замирал при этом

  • @dima_upgrade1720
    @dima_upgrade1720 26 дней назад

    Спасибо, очень полезно!

  • @СергейИгонин-п3п
    @СергейИгонин-п3п 27 дней назад

    Приходится переходить на vscode для задач автоматизации на питоне. В пайчарм из-за санкций невозможно скачивать расширения, в частности Docker😢

    • @pythonclinic
      @pythonclinic 26 дней назад

      а впн не поможет с расширениями?

  • @Xmike499-
    @Xmike499- Месяц назад

    24:30 разве? если 2 класса неявно наследуют object, то они не могу быть ромбовидными, ведь object всегда будет последним в иерархии mro, и соответственно поиск будет линейным, а не ромбовидным. Если бы было явное наследование, например, если бы и B() и C() явно были бы унаследованы допустим от А(), то тогда можно было бы говорить о ромбовидности. В Python 3 все классы неявно наследуются от object, но на конкретном тайм-коде не ромбовидная структура. Если было бы так, то не существовало бы не ромбовидных структур

    • @pythonclinic
      @pythonclinic 29 дней назад

      "то они не могу быть ромбовидными, ведь object всегда будет последним в иерархии mro, и соответственно поиск будет линейным, а не ромбовидным" - всё верно, только причина и следствие перепутаны местами, сначала возникает ромбовидное наследование от object, а потом применяется mro как решение этой проблемы, без mro был бы ромб

  • @fleshka48
    @fleshka48 Месяц назад

    Ты случайно Бауманку не оканчивал?

  • @schoolboy7921
    @schoolboy7921 Месяц назад

    Спасибо большое!

  • @АрзыбекАбдырахманов-т5з

    Пушка бомба 🔥🔥 красава. Спасибо большое за такое видео

  • @Xmike499-
    @Xmike499- Месяц назад

    чувак, ты можешь объяснить, мне всего лишь нужно знать Допустим: class MyDescriptores: def __get__(self, instanceу, owner): if instanceу is None: return self return f"Доступ к атрибуту через объект {instanceу}, класс {owner}" class MyClass: attr = MyDescriptores() obj = MyClass() print(obj.attr) каким образом в метод __get__ именно в self попадает экземпляр класса MyDescriptores, а в instance попадает экземпляр класса Myclass, а owner ссылается на сам класс Myclass? Мне именно этот момент не понятен. По какому принципу, и по каким механизмам это работает? Буду очень благодарен за обратную связь.

    • @pythonclinic
      @pythonclinic Месяц назад

      при обращении к obj.attr автоматически вызывается метод __get__ у дескриптора MyDescriptores. В методе __get__: self - это экземпляр дескриптора, то есть MyDescriptores. instance - это экземпляр класса, к которому принадлежит атрибут, в данном случае obj (экземпляр MyClass). owner - это сам класс, в данном случае MyClass. магия дескрипторов в том, что все эти параметры передаются в сам дескриптор автоматически, можно себе представить такую связь при условии что mc = MyClass(): mc.attr -> mc -> MyClass -> MyDescriptores -> __get__ по дороге как раз собрали ссылки на все нужные объекты

    • @Xmike499-
      @Xmike499- Месяц назад

      @@pythonclinic это получается какая-то жестко закодированная структура? self в __get__(self, instance, owner) - это всегда ссылка на экземпляр класса в котором он определен, instance - это всегда ссылка на экземпляр класса из которого этот дескриптор вызывается (Если брать в данном случай, как пример с выше, то это Myclass), и owner это всегда ссылка на класс из которого был вызван этот дескриптор(как в моем примере с выше Myclass)? То есть позиции данных объектов в методе __get__ заранее определены, и с этим ничего нельзя сделать? Допустим, если я захочу чтобы сначала во-второй позиции у меня шла ссылка на класс, а потом уже ссылка на экземпляр класса из которого был вызван этот дескриптор? или допустим я хочу оставить в __get__ 2 параметра, или больше 3 параметров? это заранее ошибка?

    • @pythonclinic
      @pythonclinic Месяц назад

      можно придумать, как передать больше аргументов, а вот меньше или поменять местами класс и инстанс - вряд ли

  • @fedorevg7091
    @fedorevg7091 Месяц назад

    У вас очень монотонная речь почти без увеличения, уменьшения громкости, без пауз. Я начал засыпать на 4-й минуте. При этом информацию даёте очень интересную, полезную, а главное понятную. Спасибо.

  • @romankondratyev4080
    @romankondratyev4080 2 месяца назад

    Круто! Понравилось!

  • @ArntorRUS
    @ArntorRUS 2 месяца назад

    Спасибо большое за объяснение! В дескрипторе можно как-то реализовать логику получения модифицированного атрибута как будто сам obj.__name содержит в себе атрибут? Т.е. как бы вызывал модифицированное имя таким образом zephyrka.name.upper. При этом инстанс имеет только атрибут name.

    • @pythonclinic
      @pythonclinic Месяц назад

      да, точно так же как и для обычного геттера

  • @kvas377
    @kvas377 2 месяца назад

    спасибо мужик! Очень доходчиво обьясняешь!

  • @MrSunTrope
    @MrSunTrope 2 месяца назад

    Можно рассмотреть тему протоколов и дженериков?

  • @Antik__
    @Antik__ 2 месяца назад

    Привет! Очень нравится твой контент. Скажи, а все ли переменные хранятся в стеке? Ты привел пример с локальными переменными в функции. Например, переменные, объявленные в глобальной области видимости тоже будут находится в стеке?

    • @pythonclinic
      @pythonclinic 2 месяца назад

      хэй, с глобальными переменными немного интереснее, по-сути они являются частью самого неймспейса, и поэтому будут храниться в очень похожей на словарь структуре в куче, она так и называется, globals, если я не ошибаюсь

  • @p.polunin
    @p.polunin 2 месяца назад

    Спасибо большое! Повторение, мать учения. Так ясно и лаконично!

  • @nicsolov9821
    @nicsolov9821 2 месяца назад

    Ну конструкция i+=1 - нечего не даст:) Да и разница в скорости между range и list com - несушественно. И у меня исход в пользу list com`a. Как по мне timeit, лучше для замеров.

  • @denismerigold486
    @denismerigold486 2 месяца назад

    Ютуб пусти! У меня сложилось впечатление, что вы не любите list com, больше, чем я не люблю while(требую его немедленного удаления). Начнём с базы. list com c одним цыклом/условием гораздо читабельнее, чем for. Поговорим о замерах в лекции(Как-же круто, что люди больше использую декотраторы). В чем показатель использования i += 1? Он же нечего не меняет, ну тип: локальные переменные и блаблабла lst = list(range(10)) for i in lst: i+=1 print(lst) #-> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] lst2 = [x+1 for x in lst] print(lst2) #-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for i in range(len(lst)): lst[i] += 1 print(lst) #-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] А вот, если мы будем использовать о конструкциях: append(x+1) и [x +1 for .....], то тут сразу фаваритом становится list_com. Внутренний оптимизации ( быйт код, можно подробнее узнать в ceval.c на python git, могу ошибаться с файлом) Ps. C enumerate почти то же самое.

  • @nachtblume6629
    @nachtblume6629 3 месяца назад

    Приятно что ты с нами. На твоих видосах уже доехал до мидла, ты - лучший 😍

    • @pythonclinic
      @pythonclinic 2 месяца назад

      спасибо) очень рад твоему прогрессу)

  • @denismerigold486
    @denismerigold486 3 месяца назад

    Комент сохранился еееееееееее, это проклятие Новой зеландии, спало.

  • @denismerigold486
    @denismerigold486 3 месяца назад

    Кстати, вы в курсе, почему комментарий под лекцией про списки не сохраняется?

    • @pythonclinic
      @pythonclinic 3 месяца назад

      иногда ютуб может тормозить комментарии (для модерации, например), но я не вижу, чтобы такое происходило конкретно с этим видео, не представляю

    • @denismerigold486
      @denismerigold486 3 месяца назад

      @@pythonclinic Спасибо за ответ!

  • @denismerigold486
    @denismerigold486 3 месяца назад

    Опа примеры в деньгах

  • @smilekun2825
    @smilekun2825 3 месяца назад

    Надо же было сравнить с проф версией

    • @pythonclinic
      @pythonclinic 3 месяца назад

      всё честно, сравниваем бесплатные версии))

    • @smilekun2825
      @smilekun2825 3 месяца назад

      @@pythonclinic Думаю было бы полезно рассмотреть в контектсе, когда для тебя не проблема купить лицензию. Тем более, получить проф версию очень легко, есть много способов на ютубе

    • @pythonclinic
      @pythonclinic 3 месяца назад

      в целом можно сделать отдельное видео, да

  • @v1tamin559
    @v1tamin559 3 месяца назад

    Привет, крутое видео , но может что-то посложнее возьмём. А так очень полезно наверное

    • @pythonclinic
      @pythonclinic 3 месяца назад

      можно и посложнее) вообще хотелось проверить интерес аудитории к теме более-менее простым обсуждением

  • @Xmike499-
    @Xmike499- 3 месяца назад

    Долгих лет тебе жизни

  • @Euler96
    @Euler96 3 месяца назад

    Спасибо за видео! Интересно было бы послушать развитие темы про интерфейсы. На канале есть видео про абстрактные классы, но хотелось бы послушать про их сравнение с Protocol из typing. Что и когда использовать. Отсюда оттолкнуться и рассказать про Dependancy Injection (можно на примере punq). Было бы прикольно.

    • @pythonclinic
      @pythonclinic 3 месяца назад

      запишу себе в список)

  • @ЭмметтБраун-у3т
    @ЭмметтБраун-у3т 3 месяца назад

    Отличный урок!

  • @ЭмметтБраун-у3т
    @ЭмметтБраун-у3т 3 месяца назад

    Немного не тему,но ты сильно похож на "Аньяна" из мультфильма "я,николя".Спасибо за видео!

  • @k.artiie6672
    @k.artiie6672 3 месяца назад

    Круто, спасибо за разбор! И было бы действительно очень интересно с машинным обучением посмотреть похожие видео

    • @pythonclinic
      @pythonclinic 3 месяца назад

      вас понял)

    • @babanlive
      @babanlive 2 месяца назад

      Полностью поддерживаю! Ждем ролики по машинному обучению и нейронкам. 🙏

  • @fleshka48
    @fleshka48 3 месяца назад

    Круто

  • @alexey.kondakov
    @alexey.kondakov 3 месяца назад

    Какой чёрт заставляет вас добавлять музыку?

  • @Miron_Nicolaevich
    @Miron_Nicolaevich 3 месяца назад

    канал отличный! было бы классно иметь возможность иметь такого наставника как вы:)

    • @pythonclinic
      @pythonclinic 3 месяца назад

      спасибо за отзыв)

  • @Crazy_MoT
    @Crazy_MoT 3 месяца назад

    Очень хороший материал

  • @Виталий-ь9я4т
    @Виталий-ь9я4т 3 месяца назад

    Спасибо за представление, было оригинально и познавательно.

  • @AiryFei
    @AiryFei 3 месяца назад

    я тут проверила на практике перезапись кортежи получилось, что это работает и для очень больших кортежей (len 20000) а еще это работает для списков и у меня вот вопрос, а для списков исп-ся free-list или все это результат уже каких то других механизмов оптимизации? типо используются последние освободившиеся блоки в пуле? что характерно первые ~50 списков имеют разные id, а потом id внезапно начинают повторяться (некоторые просто подряд) py 3.9, а то мб все уже поменялось

    • @pythonclinic
      @pythonclinic 3 месяца назад

      да, этот процесс сложно отследить в ходе простых экспериментов, не прибегая к анализу самой памяти и free-list но вообще да, просто используются последние освобождённые блоки, это самый важный принцип работы интерпретатора с памятью, ну и могу предположить что как раз после создания условных 50 списков (тут важно и время, и количество объектов) у тебя начинает работать сборщик мусора, что и приводит к освобождению этих блоков

    • @AiryFei
      @AiryFei 3 месяца назад

      @@pythonclinic т е список freeblock в пуле все таки работает по принципу стека? а то я из 1го видео подумала, что там очередь

    • @pythonclinic
      @pythonclinic 3 месяца назад

      да, там скорее стек, это соответствует базовому принципу - чем дольше объект просуществовал в памяти, тем больше шанс, что он ещё понадобится

    • @AiryFei
      @AiryFei 3 месяца назад

      ​@@pythonclinicспасибо за исчерпывающий ответ) очень интересно у python там все устроено!

  • @igormatveev8355
    @igormatveev8355 3 месяца назад

    Все круто! Подскажите, пожалуйста, а где вы преподаете? Как можно найти?

    • @pythonclinic
      @pythonclinic 3 месяца назад

      спасибо) я преподаю онлайн в Минской IT Academy, курс по разработке web приложений на Python + очно веду курс по алгоритмам и структурам данных на специальности "информатика" в EHU в Вильнюсе

  • @НиколайРюмин-й6и
    @НиколайРюмин-й6и 3 месяца назад

    С одной стороны просто, с другой - здорово пощупать как это работает

  • @Дмитрий-э7ъ9ч
    @Дмитрий-э7ъ9ч 3 месяца назад

    Спасибо, очень интересно. Спасибо что без музыки, досмотрел до конца.

  • @perfa8527
    @perfa8527 3 месяца назад

    Как всегда обед Как всегда твое видео Огромное спасибо.

  • @entrery_
    @entrery_ 4 месяца назад

    частично молодец, но у меня чувство что автор максимум мидл разработчик. Причина проста - for_with_range работает еще медленнее, ну конечно, вы же добавили дополнительную операцию создания списка, что в случае с for просто вынесено за предел функции. дальше - while работает медленнее потому что он низкоуровневый? нет, явно не потому. там вы банально делаете больше операций def while_loop_1(l): start_time = perf_counter() i = 0 while i < len(l): l[i] += 1 i += 1 end_time = perf_counter() elapsed_time = end_time - start_time print(f"Elapsed time: {elapsed_time:.6f} seconds") Elapsed time: 0.016325 seconds слегка оптимизируем def while_loop_2(l): start_time = perf_counter() i = 0 n = len(l) # Pre-calculate the length of the list to avoid recalculating it in each iteration while i < n: l[i] += 1 i += 1 end_time = perf_counter() elapsed_time = end_time - start_time print(f"Elapsed time: {elapsed_time:.6f} seconds") Elapsed time: 0.011326 seconds так что, неверно изложена причина, почему что-то работает медленнее а что-то быстрее. Надеюсь вам будет полезно, а может и кто-то прочтет мой коммент и разберется)

  • @lashaQA
    @lashaQA 4 месяца назад

    Очень нудно! Не смог даже досмотреть!

    • @anywaysadness6024
      @anywaysadness6024 Месяц назад

      В окопе не нужны абстрактные классы

  • @AiryFei
    @AiryFei 4 месяца назад

    Очень хорошо все объяснили! Интересно было бы еще послушать про паттерны/методологию проектирования, про SOLID и eafp/lbyl было оч полезно! а если более приземленно, то про типизацию (аннотацию типов, typing,pydantic?, дженерики и тп).. юнит-тестирование, логгирование.. Короче, в исполнении профессионала все интересно) А еще момент, мб стоит такие длинные видео делить (например, на BST и RBT), это психологически легче воспринимается, и возможно увеличит число просмотров, а то народ возможно пугает хронометраж)

    • @pythonclinic
      @pythonclinic 4 месяца назад

      спасибо) все пожелания учитываются)

  • @subz466
    @subz466 4 месяца назад

    Ну хз. Только начал смотреть. Статический метод clean_folder возвращает или булеан или стринг, ну такое

  • @kxma-o9t
    @kxma-o9t 4 месяца назад

    пишу на spyder 🤡

  • @AiryFei
    @AiryFei 4 месяца назад

    "Читается как дек. Верьте мне" прекрасная манипуляция, почти как "не гуглите это", сразу побежала в гугл переводчик😂 ваши видео по Пайтону самые интересные и содержательные, а стиль кода глаз радует, супер!

  • @alexn9375
    @alexn9375 4 месяца назад

    Здравствуйте. Благодарю вас за отличное объяснение с прекрасными примерами. Вы рисовали в программе drawio, какой шаблон вы использовали и где его можно найти? подскажите пожалуйста

    • @pythonclinic
      @pythonclinic 4 месяца назад

      привет, спасибо за отзыв) я рисую без шаблонов, иногда просто во вкладке style включаю параметр sketch для всего документа, оно даёт такой вид