Редактируем видео
Пакет
В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
#moviepy
Пакет
moviepy
позволяет обрезать и склеивать видео, добавлять видеоэффекты, а также редактировать звук. В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
#moviepy
Получаем и задаем лимит рекурсии
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
Но с помощью модуля
И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
RecursionError
во время создания рекурсивных алгоритмов. Но с помощью модуля
sys
можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
Флаги явного преобразования
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#строки
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля
format
перед его непосредственным форматированием. Это поле можно использовать для переопределения поведения
format
для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r
— преобразует значение в строку, используя функцию repr()
.!s
— преобразует значение в строку, используя функцию str()
.В примере, в случае с флагом
!r
строка 'Hello'
будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s
— без кавычек (в более удобном для чтения виде). #строки
Мастхэв библиотека для каждого проекта
Как оказалось, не все еще в курсе топовой библиотеки
Название
Внутри находится 250+ мощных инструментов, включая кеширование, 2 типа приоритетный очередей, продвинутый
В качестве примера приведу утилиту
На картинке выше показано, как можно легко разделить строку по знакам пунктуации, сделать слаг, вытащить текст из HTML и найти хештеги в строке.
#boltons #строки
Как оказалось, не все еще в курсе топовой библиотеки
boltons
, которая отлично дополняет стандартную библиотеку. Я лично сам регулярно использовал утилиты оттуда в последний месяц и теперь не понимаю, как раньше жил без этого пакета. Название
boltons
произошло от слова builtins
, а так называют уже встроенный функционал. То есть разработчики прямо намекают, что их библиотека должен быть по умолчанию в Python. Внутри находится 250+ мощных инструментов, включая кеширование, 2 типа приоритетный очередей, продвинутый
itertools
, 2д структуры данных, обертки для сокетов и много всего другого. В качестве примера приведу утилиту
strutils
. Она позволяет производить всевозможные операции со строками и экономит время на написании костылей. На картинке выше показано, как можно легко разделить строку по знакам пунктуации, сделать слаг, вытащить текст из HTML и найти хештеги в строке.
#boltons #строки
Упрощенная работа с JSON
Казалось бы, куда еще проще, но есть один интересный пакет
Основные примеры использования показаны на картинке, там нет ничего сложного. Метод
Вообще возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее советую почитать в документации.
#json #jmespath
Казалось бы, куда еще проще, но есть один интересный пакет
JMESpath
, который позволяет декларативно указать, как извлекать элементы из документа JSON. Основные примеры использования показаны на картинке, там нет ничего сложного. Метод
search
принимает паттерн, по которому требуется извлечь данные, а также словарь (который в общем-то похож на JSON). Вообще возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее советую почитать в документации.
#json #jmespath
Forwarded from [404] — программирование
Получи оффер в Яндексе за 2 дня 🔥
Яндекс проводит Weekend offer, и это отличная возможность получить оффер для тех, кто прогает уже больше 2-х лет и умеет писать на С++, Java, Python, C#, Go или Kotlin. Нужно до 30 мая пройти автоматизированный отбор, а 5-6 июня написать 2 классных кода и пройти финальное собеседование с командой. Ну и все, оффер от Яндекса у тебя в руках!
Скоро регистрация закроется, поэтому переходи по ссылке сейчас.
Яндекс проводит Weekend offer, и это отличная возможность получить оффер для тех, кто прогает уже больше 2-х лет и умеет писать на С++, Java, Python, C#, Go или Kotlin. Нужно до 30 мая пройти автоматизированный отбор, а 5-6 июня написать 2 классных кода и пройти финальное собеседование с командой. Ну и все, оффер от Яндекса у тебя в руках!
Скоро регистрация закроется, поэтому переходи по ссылке сейчас.
Получаем срез из бесконечного генератора
Вероятно, у многих были случаи, когда требовалось получить конечный список элементов из бесконечного генератора.
И в целом задача вполне простая, но сейчас рассмотрим лаконичный вариант — воспользуемся пакетом
В нашем случае понадобится
Для примера мы написали функцию-генератор, которая вычисляет числа Фибоначчи. Результат можете посмотреть на картинке.
#itertools
Вероятно, у многих были случаи, когда требовалось получить конечный список элементов из бесконечного генератора.
И в целом задача вполне простая, но сейчас рассмотрим лаконичный вариант — воспользуемся пакетом
itertools
, в котором есть функции на все случаи генераторов. В нашем случае понадобится
islice
, который как раз берет "срез" из генератора. В аргументах указываем объект генератора и длину среза. Для примера мы написали функцию-генератор, которая вычисляет числа Фибоначчи. Результат можете посмотреть на картинке.
#itertools
Кэшированные атрибуты
Во встроенном пакете
Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэшеирование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
По сути,
#functools #cached_property
Во встроенном пакете
functools
есть классный декоратор @cached_property
, который позволяет кэшировать результат метода и загнать его в атрибут.Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэшеирование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
По сути,
@cached_property
можно сравнить с комбинацией декораторов @property
(про это был пост) и @functools.lru_cache
(и про это тоже).#functools #cached_property
Важное про цифры и Юникод
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры. Полный список находится здесь.
Это крайне важно знать, потому что эти символы влияют на такие функции, как
Думаю, в один момент это знание сэкономит вам время на исправление "бага" с такими странными символами. Предупрежден — значит вооружен.
#числа #юникод
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры. Полный список находится здесь.
Это крайне важно знать, потому что эти символы влияют на такие функции, как
int
, unicode.isdecimal
и даже re.match
.Думаю, в один момент это знание сэкономит вам время на исправление "бага" с такими странными символами. Предупрежден — значит вооружен.
#числа #юникод
Гайд по Python: с чего начать новичку
На канале — много новых подписчиков. Поэтому написал подробную статью, что учить, читать и смотреть. Разделил на три области: веб-разработка, машинное обучение и анализ данных.
Также прочитайте "Первые шаги в Python" — это тоже хороший вводный гайд, где много полезных книг, сайтов для практики и курсов.
Читать 5 минут
#статья
На канале — много новых подписчиков. Поэтому написал подробную статью, что учить, читать и смотреть. Разделил на три области: веб-разработка, машинное обучение и анализ данных.
Также прочитайте "Первые шаги в Python" — это тоже хороший вводный гайд, где много полезных книг, сайтов для практики и курсов.
Читать 5 минут
#статья
Отправляем универсальные уведомления
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get\_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get\_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Объект Ellipsis
В Python есть крайне интересный объект, который обозначается как
Применяется он зачастую при работе со срезами в Numpy, но и в обычном коде его тоже встретить можно. Например,
Если привести его к логическому типу данных, то увидим
#ellipsis
В Python есть крайне интересный объект, который обозначается как
...
, то есть многоточие. Этот объект называется Ellipsis
, и используется он в основном как заготовка для чего-то еще не реализованного.Применяется он зачастую при работе со срезами в Numpy, но и в обычном коде его тоже встретить можно. Например,
...
периодически встречается в теле функции в качестве заглушки.Если привести его к логическому типу данных, то увидим
True
— это важный момент, потому что похожий по своей сути None
выдает False
.#ellipsis
Узнаем кодировку текста
Думаю, у всех были ситуации, когда вы открыли файл или получили ответ от сервера, а внутри оказывался набор странных символов в непонятной кодировке.
Пакет
В примере на картинке мы получили ответ по запросу к серверу, взяли его содержимое и проверили кодировку через этот метод.
#chardet
Думаю, у всех были ситуации, когда вы открыли файл или получили ответ от сервера, а внутри оказывался набор странных символов в непонятной кодировке.
Пакет
chardet
как раз был создан для работы с кодировкам. Его метод detect
выдает предполагаемую кодировку с точностью от 0 до 1.В примере на картинке мы получили ответ по запросу к серверу, взяли его содержимое и проверили кодировку через этот метод.
#chardet
Отлавливаем ошибки с помощью assert
Инструкция
Если выполнить инструкцию
Однако не нужно пытаться обработать исключение
В примере мы проверили, является ли переданный аргумент числовым типом данных. Если не является, то будет вызвано исключение и выведено указанное сообщение.
#исключения #assert
Инструкция
assert
принимает логическое выражение и необязательное сообщение. Она используется для проверки типов, значений аргумента и вывода функции, а также для отладки, поскольку останавливает программу в случае ошибки.Если выполнить инструкцию
assert
с логическим выражением, результат которого равен True
, ничего не произойдет. Но в случае с False
будет сгенерировано исключение AssertionError
.Однако не нужно пытаться обработать исключение
AssertionError
блоком try-except
. В таком случае assert
теряет свой смысл.В примере мы проверили, является ли переданный аргумент числовым типом данных. Если не является, то будет вызвано исключение и выведено указанное сообщение.
#исключения #assert
Атрибуты функций
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
__call__
. Именно он и позволяет выполнять синтаксис с вызовом через круглые скобки.И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
Разделители для целых чисел
Трудно визуально различить целые числа подобные
Но Python позволяет использовать нижнее подчеркивание как разделитель для улучшения читабельности.
Например,
#числа
Трудно визуально различить целые числа подобные
10000000
и 100000000
. Использовать запятые, как в английском языке, не получится.Но Python позволяет использовать нижнее подчеркивание как разделитель для улучшения читабельности.
Например,
1_000_000
будет интерпретироваться как целое число 1000000
.#числа
Заглушка в коде
В ходе исполнения оператора
Например, вам надо сделать несколько функций, вы написали
Или в конструкции
#pass
В ходе исполнения оператора
pass
ничего не происходит, поэтому он может использоваться в качестве некой заглушки в тех местах, где это синтаксически необходимо.Например, вам надо сделать несколько функций, вы написали
def'ы
и названия, но сам код еще не успели, однако программу надо запустить и проверить что-то другое. Вот тут и понадобится pass
.Или в конструкции
try-except
, чтобы просто проигнорировать и никак не обрабатывать ошибку в программе.#pass
Универсальный парсер статей
Пакет
Плюс пакета в том, что весь процесс парсинга автоматизирован и не надо вручную искать нужные теги и тянуть из них данные.
Но точность парсера зависит в основном от того, как хорошо сверстана запрашиваемая страница. Поэтому в некоторых случаях результат может отличаться от ожиданий.
#парсер #newspaper3k
Пакет
newspaper3k
позволяет парсить статьи и извлекать из них заголовки, текст, дату публикации, имена авторов и много другой информации.Плюс пакета в том, что весь процесс парсинга автоматизирован и не надо вручную искать нужные теги и тянуть из них данные.
Но точность парсера зависит в основном от того, как хорошо сверстана запрашиваемая страница. Поэтому в некоторых случаях результат может отличаться от ожиданий.
#парсер #newspaper3k
Денег будем платить немного, зато дадим акции. У вас есть шанс стать совладельцем суперстартапа. Казалось бы, такие предложения звучат как кидалово, и шанс стать совладельцем Apple из гаража почти нулевой. Но многие программисты так не думают, и правильно считают. Об этом говорит новое исследование компании G-mate. Это чуваки, которые помогают сделать карьеру IT-специалистам.
Ребята опросили несколько сотен айтишников разного уровня — от джуниоров до сеньоров. И результаты вышли довольно неожиданными. Как оказалось, многие программисты готовы получать от работодателей опционы. Например, по такой системе работает «Яндекс». То есть, ты получаешь зарплату, а в качестве бонусной части - акции, которые растут вместе с брендом.
Это, к слову, и становится отличной мотивацией. Ты работаешь не только на компанию, но и повышаешь стоимость своего же акционного портфеля. По данным опроса, 55% профессионалов готовы поменять место работы, если им предложат более выгодные условия, например, те же опционы.
Впрочем, это не главный вывод исследования. Как показал опрос, для большинства программистов на первом месте стоит не доход, а «инженерская душа». Если тебе комфортно работать с соратниками по профессии, ты чувствуешь коллег и то, что занимаешься важным делом — зарплата встаёт на второе место. Ну а опционы к ней — просто как хороший бонус. Опрос показал, что такое поощрение даёт в среднем + 30% к доходу. Больше, чем давали бы стандартные премии.
Но в этом есть и минус. Про существование опционов знают и получают их только 17% опрошенных. То есть, ваш доход уже могла бы быть выше благодаря опционам.. Мы бы на вашем месте прямо сейчас задали этот вопрос своему работодателю.
Ребята опросили несколько сотен айтишников разного уровня — от джуниоров до сеньоров. И результаты вышли довольно неожиданными. Как оказалось, многие программисты готовы получать от работодателей опционы. Например, по такой системе работает «Яндекс». То есть, ты получаешь зарплату, а в качестве бонусной части - акции, которые растут вместе с брендом.
Это, к слову, и становится отличной мотивацией. Ты работаешь не только на компанию, но и повышаешь стоимость своего же акционного портфеля. По данным опроса, 55% профессионалов готовы поменять место работы, если им предложат более выгодные условия, например, те же опционы.
Впрочем, это не главный вывод исследования. Как показал опрос, для большинства программистов на первом месте стоит не доход, а «инженерская душа». Если тебе комфортно работать с соратниками по профессии, ты чувствуешь коллег и то, что занимаешься важным делом — зарплата встаёт на второе место. Ну а опционы к ней — просто как хороший бонус. Опрос показал, что такое поощрение даёт в среднем + 30% к доходу. Больше, чем давали бы стандартные премии.
Но в этом есть и минус. Про существование опционов знают и получают их только 17% опрошенных. То есть, ваш доход уже могла бы быть выше благодаря опционам.. Мы бы на вашем месте прямо сейчас задали этот вопрос своему работодателю.
Временные файлы
В стандартной библиотеке Python есть модуль
Функция
Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile
В стандартной библиотеке Python есть модуль
tempfile
, который содержит классы и методы для корректной работы со временными файлами и директориями.Функция
TemporaryFile
создает временный файл в системной директории и возвращает файлоподобный объект.Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile