Python Academy
49.5K subscribers
1.08K photos
2 videos
374 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
加入频道
7 фишек Python, максимально улучшающие твой код

Выходные – отличное время для изучения нового материала. В этот раз Святослав подготовил для вас кое-что крайне интересное и уникальное. Приятного прочтения ✌️

Читать 10 минут
​​Форматирование строк

Привет, в этом посте разберем возможные в Python методы форматирования строк. Все примеры использования можете посмотреть на прикрепленной ниже картинке.

Самый древний и уже редко используемый способ – с помощью оператора %. Написание %s и %d зависит от того, что мы туда передаем и что хотим увидеть в итоге, но это уже тема отдельного поста.

В Python 2.6 появился метод .format() с немного отличающимся синтаксисом от существующего оператора %. К слову, этот метод активно используется и по сей день, в отличии от его предшественника.

Начиная с версии Python 3.6, доступны f-строки – свежий и наиболее производительный способ форматирования строк.
​​Получаем срез из бесконечного генератора

Допустим, мы хотим получить какой-то конечный список элементов из бесконечного генератора. Что нам для этого понадобится?

Для начала создадим сам генератор fib, уже немного знакомый вам по посту, где мы использовали lru_cache, правда там была рекурсивная функция. Этот генератор позволяет (за неимением другого слова) "генерировать" числа из последовательности Фибоначчи.

Чтобы получить желаемый срез, импортируем модуль itertools, в котором уже есть удобная функция islice, позволяющая осуществить срез генератора fib.
​​Назначение функций по условию

Наверняка большинство из вас знакомы с тернарным оператором, позволяющим записать простое условное выражение с if:

A = Y if X else Z

Интерпретатор выполняет выражение Y, если объект XTrue, и Z, если XFalse.

Но оказывается, тернарный оператор можно использовать не только для переменных, но и для функций.
​​Функция map

Привет, крайне часто начинающие программисты изобретают велосипеды при работе с коллекциями. Избежать часть таких ситуаций поможет знание map.

На вход принимает два обязательных аргмумента: функция-обработчик и итерируемый объект. Суть map’a заключается в том, что он применяет переданную функцию к каждому элементу последовательности. А возвращает так называемый map-объект, который в дальнейшем можно конвертировать в обычный список и не только.

Обратите внимание, в примере на картинке мы не пишем скобки у функции add_five при вызове map – это означает то, что мы передаем объект функции, а не результат её выполнения.
​​Как сделать так, чтобы функция вернула True?

Менять тело функции нельзя. Требуется просто найти такое значение, при котором функция вернёт True.

Предлагайте свои варианты в нашем чате. А для нетерпеливых прикрепляем ссылку на наш вариант.

Решение задачи
Работа с процессами в Python

С появлением многоядерных процессоров стала общеупотребительной практика распространять нагрузку на все доступные ядра. Существует два основных подхода в распределении нагрузки: использование процессов и потоков. О первом мы как раз сейчас и поговорим.

Читать 6 минут
​​Разница между == и is

Недавно в чате наши подписчики затрагивали эту тему, поэтому мы решили разложить всё по полочкам, чтобы в дальнейшем не возникало вопросов.

Итак, оператор == проверяет равенство значений двух объектов. А оператор is в свою очередь проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.

Однако Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны некоторые казусы, как в примере.
​​Избегайте неоправданных циклов с коллекциями

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

Но в этом и проблема. Такой подход займет как минимум три строчки: объявление новой переменной, создание цикла и инструкции внутри него. При этом также снижается скорость работы скрипта.

На прикрепленной картинке я привел две достойные альтернативы, а именно использование генератора списков и функции map. В обоих вариантах не только код становится короче и выразительнее, но и заметно повышается производительность.
Здоровье программиста

Поскольку именно сейчас, в связи с карантином, все проводят очень много времени за компьютером, мы подготовили несколько рекомендаций для поддержания вашего здоровья.

Читать 7 минут
​​"Быстрый" контейнер deque

Встроенных списков в Python иногда может не хватать, поэтому покажем одну хорошую альтернативу. Deque может быть реализован c помощью модуля collections.

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

Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
Привет, в ближайшее время мы анонсируем наш новый курс по Python, где будут только продвинутые темы (ООП, декораторы, асинхронность и т. п.). Какая цена вас бы устроила?
Anonymous Poll
44%
500-1000
6%
1000-2000
3%
2000-3000
3%
3000+
42%
Зависит от содержания
1%
Напишу в личные сообщения
​​Контекстные менеджеры

Контекстные менеджеры позволяют задать поведение при работе с конструкцией with: при входе и выходе из блока. Это упрощает работу с ресурсами в части их захвата и освобождения; транзакциями, когда нужно либо полностью закончить транзакцию, либо откатить ее целиком.

Простейшей функцией, использующей данный принцип является функция open. Каждый раз, когда мы открываем файл, нам необходимо его закрыть, чтобы вытолкнуть выходные данные на диск (на самом деле Python вызывает метод close автоматически, но явное его использование является хорошим тоном).

Чтобы каждый раз не вызывать метод close мы можем воспользоваться контекстным менеджером функции open, который автоматически закроет файл после выхода из блока.
Вирус локер на Python и Tkinter

Локер – популярный вид вирусов, который блокирует компьютер, и чаще всего злоумышленники просят что-либо взамен на разблокировку. Именно это мы сегодня и будем реализовывать.

Читать 4 минуты
​​Создаём свой контекстный менеджер

Привет, в четверг на канале вышел небольшой пост про контекстные менеджеры. Сейчас разберём, как их можно реализовать.

В любом контекстном менеджере должны быть определены методы __enter__ и __exit__. В качестве примера создадим подобие уже существующего open.

Метод __enter__ вызывается автоматически и возвращает объект файла. После того, как блок with заканчивается, также вызывается метод __exit__, который закрывает файл.

А более подробно мы рассказываем про эту тему в нашем курсе по продвинутым темам.
​​Создание функций на основе других с "замороженными" параметрами

Привет, сегодня поговорим про очень важную функцию partial из пакета functools. Более подробно мы рассказываем про это в курсе, но сейчас дадим краткое описание работы.

Данная функция принимает в качестве первого аргумента любую другую функцию, а дальше параметры, которые будут автоматически переданы в эту функцию при вызове уже новой функции, которую вернёт partial.

Например, можем создать функцию, которая умножает два числа, а потом "заморозить" один аргумент, как на картинке.
​​Функция itertools.cycle

Напоминаю, что у нас всё ещё идёт набор на курс, который начинается уже в этот понедельник. А сейчас покажу вам кое-что интересное из курса.

В лекции, посвященной итераторам и генераторам, мы также показываем полезные функции из пакета itertools. К примеру, метод cycle из последовательности ['red', 'white', 'blue'] генерирует повторяющуюся бесконечную.

А далее, например, можно воспользоваться islice. Он возвращает конечный итератор из любой большой или даже бесконечной последовательности.
​​Последний релиз Python 2.x

Кстати говоря, не так давно вышла последняя версия Python 2.7, а именно Python 2.7.18.

Эта версия является особенным выпуском. Я имею в виду, конечно, тот факт, что "2.7.18" является ближайшим номером версии Python которая примерно равна числу e, или числу Эйлера.

Менее трансцендентное свойство Python 2.7.18 заключается в том, что это последний выпуск Python 2.7. и, следовательно, последний выпуск Python 2.

Любителям CPython пришло время попрощаться с Python 2. Эта версия поддерживалась почти 10 лет параллельно с обратно-несовместимыми версиями Python 3. Теперь же остаётся только одна версия языка, которая продолжит развиваться.

Скачать последнюю версию языка можно по этой ссылке.
Моржовый оператор (Walrus Operator)

Новый способ присваивания выражения (:=), или оператор «морж», был самой обсуждаемой функцией, представленной в Python версии 3.8. Новое дополнение к языку было предложено в PEP 572.

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

Но фишка заключается в том, что вся эта конструкция, скажем так, возвращает присвоенное значение, как это делают обычные функции. А если хотите практические примеры, то напишите плюсик в чат.

#тонкости
Моржовый оператор – примеры

В предыдущем посте мы обсудили синтаксис нового оператора присваивания. В чате появилось достаточное количество просьб продолжить, поэтому в этом посте мы рассмотрим частные случаи, когда морж в коде выглядит солидно.

Но для начала стоит отметить ещё один важный момент – моржовый оператор не создаёт новую область видимости. То есть переменная, созданная в условии конструкции if-else с помощью моржа, также будет доступна и за пределом блока.

#тонкости
3 трюка с itertools

Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции – chain. Она позволяет "склеивать" несколько итерируемых элементов в один.

Далее, accumulate. Эта функция немного похожа на reduce, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min), к каждому последующему элементу по порядку: min(11), min(11, 3), min(11, 3, 9) и так далее.

А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция combinations. Вторым аргументом можно задать длину этой самой комбинации.

#модули #itertools