en
Feedback
Python академия

Python академия

Open in Telegram

Учи Python быстро и легко. Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам. ✔ Подходит для прокачки навыков кодирования. По всем вопросам @evgenycarter

Show more
7 172
Subscribers
No data24 hours
-117 days
-4230 days
Posts Archive
Дизассемблирование Встроенный модуль dis позволяет декомпилировать написанную вами программу в байт-код Python. На картинке п
Дизассемблирование Встроенный модуль dis позволяет декомпилировать написанную вами программу в байт-код Python. На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы. Подписывайтесь на канал 👉@pythonofff

Как легко отсортировать объект по нескольким ключам? Перед нами стоит задача отсортировать список машин. Но сделать это нужно
Как легко отсортировать объект по нескольким ключам? Перед нами стоит задача отсортировать список машин. Но сделать это нужно не просто по названию бренда или году производства, а сразу по обоим полям. Решить эту задачу можно очень просто с помощью operator.itemgetter(). В результате все бренды сгруппированы и отсортированы по возрасту. Подписывайтесь на канал 👉@pythonofff

Pyperclip Модуль pyperclip имеет функции copy() и paste(), которые позволяют отправлять текст в буфер обмена вашего компьютер
Pyperclip Модуль pyperclip имеет функции copy() и paste(), которые позволяют отправлять текст в буфер обмена вашего компьютера и получать его оттуда. Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную. Установить этот модуль можно привычным способом через пакетный менеджер pip. Подписывайтесь на канал 👉@pythonofff

Метод get для словарей У словарей есть метод get, который возвращает значение по ключу, переданному в аргументах функции. Одн
Метод get для словарей У словарей есть метод get, который возвращает значение по ключу, переданному в аргументах функции. Однако если такого ключа в словаре нет, то исключение не выбрасывается, а возвращается значение по умолчанию, которое передаётся вторым аргументом, или же None, если второй аргумент не передан. В качестве примера создадим словарь с именами, которые можно получить по определенным значениям, и напишем функцию, которая возвращает приветственную фразу со взятием имени из этого словаря. Подписывайтесь на канал 👉@pythonofff

"Быстрый" контейнер deque Структура deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые
"Быстрый" контейнер deque Структура deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементов из обоих концов контейнера. К тому же, контейнер deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со стандартным списком, у которого сложность по времени для тех же операций составляет O(n). Также для deque есть возможность использовать такие стандартные функции, как sum, min, max и другие. Подписывайтесь на канал 👉@pythonofff

🔥Как аналитику правильно обработать данные перед исследованием? Разобраться с этим можно на открытом уроке «Предварительная
🔥Как аналитику правильно обработать данные перед исследованием? Разобраться с этим можно на открытом уроке «Предварительная обработка данных перед исследованием» от OTUS, который пройдёт 9 августа в 20:00. Урок приурочен к старту онлайн-курса «Аналитик данных», который можно будет приобрести в рассрочку. 🎇На вебинаре: Расскажем про основные методы проверки, которым важно подвергнуть ваш датасет перед началом работы; Познакомимся с этапами подготовки и очистки данных; Поговорим об основных подводных камнях, которые могут нас подстерегать на этом пути. 👩‍🦱🧑‍🦱Кому подойдет: Тем, кто хотя бы раз задумывался о переходе в сферу дата-аналитики; Тем, кто хочет разобраться в методах исследования данных. В результате вебинара вы узнаете как проводится подготовка данных к дальнейшим, более глубинным, исследованиям. 👉Регистрация на урок: https://otus.pw/EVrZ/

Прочитать произвольную строку из файла Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых кр
Прочитать произвольную строку из файла Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети. И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле text.txt: Приветствую! Здравствуйте! Ку, здарова. Добрый день! Привет! Чтобы вывести это на экран, может помочь функция getline из модуля linecache. В чем главное отличие этой функции от обычного метода чтения из файла? Функция getline кеширует все строчки файла в списке, так что следующие вызовы get_answer отработают моментально. Подписывайтесь на канал 👉@pythonofff

⁠Блок else в циклах for Хауди хо, друзья. Практически все новички теряются при виде блока else после циклов, поэтому сейчас н
⁠Блок else в циклах for Хауди хо, друзья. Практически все новички теряются при виде блока else после циклов, поэтому сейчас немного проясним ситуацию. В Python блок else может быть представлен не только в условных конструкциях после if, но и в циклах после for и while. В данном случае код внутри else выполняется, только если цикл не был прерван с помощью break. Типичный пример использования – поиск чего-либо в цикле с использованием ключевого слова break при нахождении, как показано на картинке. Исходный код текстом можете найти в нашем чате. Подписывайтесь на канал 👉@pythonofff

⁠Логические any и all Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем
⁠Логические any и all Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на прикрепленный ниже код. Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – в случае, если все верны. На мой взгляд, эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании. Подписывайтесь на канал 👉@pythonofff

⁠Автоматический счетчик во время итераций по коллекциям Привет. Достаточно часто я наблюдаю ситуации, в которых новички созда
⁠Автоматический счетчик во время итераций по коллекциям Привет. Достаточно часто я наблюдаю ситуации, в которых новички создают "костыли", когда им необходим счетчик во время обхода коллекции. И вот решение проблемы. Итак, встроенная в Python функция enumerate применяется для итерируемых коллекций (строки, списки, словари и другие) и создает объект, который генерирует кортежи, состоящие из двух элементов – индекса элемента и самого элемента. И это еще не все, enumerate также принимает необязательный второй аргумент, который позволяет указать, с какого числа начинать отсчет. По умолчанию индекс начинается с нуля, но в данном примере я передал единицу. Подписывайтесь на канал 👉@pythonofff

Вычисляем размер объектов в памяти Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(o
Вычисляем размер объектов в памяти Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(object[, default]). Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно. Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов. Аргумент default позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError . Функция getsizeof вызывает метод __sizeof__ объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора. Подписывайтесь на канал 👉@pythonofff

Explicit Conversion Flag Флаг явного преобразования используется для преобразования значения поля format перед его непосредст
Explicit Conversion Flag Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием. Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r – преобразует значение в строку, используя функцию repr() !s – преобразует значение в строку, используя функцию str() В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде). Подписывайтесь на канал 👉@pythonofff

Ускоряем код с помощью векторизации Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. испо
Ускоряем код с помощью векторизации Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами. Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией my_func мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize. По сути, vectorize преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению. Подписывайтесь на канал 👉@pythonofff

⁠Кэширование функций Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается
⁠Кэширование функций Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается с одинаковыми аргументами. Раньше приходилось создавать свою реализацию, но в Python 3.2+ появился декоратор lru_cache, который позволяет нам быстро кэшировать и вскрывать возвращаемые значения функции. Давайте реализуем калькулятор чисел Фибоначчи с использованием кэша. Советую попробовать запустить любую рекурсивную функцию с кэшированием и без него, прирост в скорости замечается сразу. Подписывайтесь на канал 👉@pythonofff

Упаковка параметров с помощью urlencode Новая неделя – новые знания. В это утро понедельника я подготовил для вас крайне прак
Упаковка параметров с помощью urlencode Новая неделя – новые знания. В это утро понедельника я подготовил для вас крайне практичный пост. Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так: url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5) Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция urlencode из из модуля urllib. Подписывайтесь на канал 👉@pythonofff

Генерация уникальных идентификаторов В этот пятничный вечер Адриан подготовил для вас небольшой, но крайне полезный приём, ко
Генерация уникальных идентификаторов В этот пятничный вечер Адриан подготовил для вас небольшой, но крайне полезный приём, который часто применяется на практике. Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier), глобально уникальный идентификатор. Так, мы можем создать случайное 128-битное число, которое наверняка будет уникальным. Существует более 2¹²² возможных UUID. Это более 5 ундециллионов, то есть 36 нулей. Вероятность нахождения дубликатов в заданном наборе крайне мала. Даже при наличии триллиона UUID вероятность того, что среди них есть дубликат, гораздо меньше, чем один к миллиарду. Вполне недурно для двух строк кода. Подписывайтесь на канал 👉@pythonofff

Switch-конструкция с помощью словаря Привет, на связи Адриан. Начинающие программисты достаточно часто спрашивают меня про sw
Switch-конструкция с помощью словаря Привет, на связи Адриан. Начинающие программисты достаточно часто спрашивают меня про switch-конструкции, а в Python их вобщем-то нет. Однако существует одно хитрое решение – использовать словарь, где значениями будут функции. В качестве примера напишем словарь, который будет использован для математических операторов. В этом примере я использовал lambda-функции для упрощения кода, но вместо них можете подставить любые другие. Объясню немного подробнее, lambda – объявление анонимной функции, x и y - принимаемые аргументы, x + y – возвращаемый результат. Подписывайтесь на канал 👉@pythonofff

Именование среза с использованием функции slice Работа с множеством значений, которые заданы индексами, может быстро обернуть
Именование среза с использованием функции slice Работа с множеством значений, которые заданы индексами, может быстро обернуться беспорядком – как в плане поддержки, так и в плане читабельности кода. Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Но есть и более удачный способ написания качественного кода, как показано на картинке Подписывайтесь на канал 👉@pythonofff

Частичное применение Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать
Частичное применение Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию partial из стандартной библиотеки functools. Предоставление функции меньшего количества аргументов, чем она ожидает, называется частичным применением функций. Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров. Подписывайтесь на канал 👉@pythonofff

Правильным ответом является [1, 2] Происходит так из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибут
Правильным ответом является [1, 2] Происходит так из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте функции defaults, который создается один раз в момент определения функции. А для того, чтобы добиться правильного поведения функции, следует воспользоваться ключевым словом None при о Подписывайтесь на канал 👉@pythonofff