Python - в одну строку

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
"Быстрый" контейнер deque

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

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

Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Как проверить существование переменной в Python?

Вы можете использовать in locals() или in globals(), чтобы проверить переменная существует в Python, разница только:
in locals() проверяет если переменная объявлена в локальной зоне видимости
in globals() проверяет если переменная объявлена в глобальной зоне видимости
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Контекстные менеджеры

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

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

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

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Вывод значения по умолчанию для отсутствующего ключа словаря

Если вы обратитесь к несуществующему ключу словаря, то это вызовет исключение. Избежать этого можно, вызывая метод get. В примере метод выдает None (по умолчанию) или заданное значение аргумента.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Декораторы

Очень важная тема, с помощью декорирования можно писать очень удобные логи или существенно расширять функции.
Многие библиотеки работают с использованием декораторов: Flask и aiogram хорошие тому примеры.
Мы показываем лишь простой пример, возможности куда шире. Позже покажем пример использования с упоминаемыми выше библиотеками.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Удаление дубликатов в списке

Первое что приходит на ум — преобразовать список во множество и обратно. Это хороший и рабочий способ. Но если вам нужно сохранить последовательность, то этот способ не подойдёт. С этой задачей легко справится OrderedDict из модуля collections
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Как красиво напечатать json в Python?

Вы можете использовать json.dumps() в Python, чтобы красиво напечатать json.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Асинхронное программирование

Обычно мы пишем синхронный код - выполняется по порядку один за другим. Но иногда требуется, чтобы выполнялось несколько задач одновременно. К примеру, пока копируются файлы можно было поиграть в игру. Это возможно благодаря нескольким ядрам и потокам. ВАЖНО! Асинхронность не обязательно делает код быстрее, но может повысить его эффективность. В момент простаивания процессор будет переключаться на другие задачи.

На картинке программа, где повар готовит сразу несколько блюд. По другому бы нам пришлось по-очереди готовить каждое блюдо, но мы можем вернуться к другим, если поставили блюдо на огонь.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Библиотека JmesPath

Как вы уже заметили работать с json файлами в python очень удобно, ведь они отлично конвертируется в словарь. Также мы разобрали полезную библиотеку json, поэтому еще раз говорить о ней не будем.

Но вот нам надо получить данные из файла. А формат json, как правило имеет множество вложений. Искать что-то нужное можно, но не всегда это удобно и красиво (а дзен Python говорит, что красота имеет значение)

JmesPath облегчает работу в несколько раз. Вместо file['a']['b']['c'] можно написать jmespath.search('a.b.c', file). Кажется стало длиннее, но это потому что мы взяли мало элементов, и согласитесь a.b.c выглядит лучше. Даже отредактировать в случае чего будет проще.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Как сравнить строки без учета регистра в Python?

Есть несколько способов сравнить строки без учета регистра в Python:

Использовать метод .casefold() чтобы игнорировать регистр
Привести обе строки к заглавным или строчным, используя lower() или upper() для сравниваемых строк

Для просмотра ссылки Войди или Зарегистрируйся

фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Библиотека schedule

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

Конечно можно было использовать стандартный таймер, но зачем изобретать велосипед? С данной библиотекой планировка задач станет намного проще и понятнее другим программистам.

Библиотеку необходимо установить:

install schedule

В примере используется seconds, но можно использовать minutes, hour, day.at("8:00"), monday, minute.at(":17"). Если добавлять at, то указываем во сколько именно произойдет событие.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Библиотека Progressbar

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

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

Все это очень интересно, но если мы начнем самостоятельно писать полосу прогресса, то отвлечемся от основного кода. К счастью, в python есть библиотека Progressbar, которая делает все за нас.
фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Как распарсить строку json в Python?

Для того, чтобы распарсить строку json, мы можем перевести её в читаемый для python'а формат dict с помощью метода .loads()
Для просмотра ссылки Войди или Зарегистрируйся

фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
Как открыть zip файл в Python?

Чтобы открыть zip-файл в Python, вы можете воспользоваться стандартной библиотекой zipfile
Для просмотра ссылки Войди или Зарегистрируйся

фронт.jpg
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,771
Реакции
1,451
Credits
25,329
infinity

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

float('infinity') или float('inf') для получения максимально возможного числа

float('-infinity') или float('-inf') для получения минимально возможного числа.

Не работает с int, требуется использовать именно float.
фронт.jpg