Python

Устранение ошибки Passing coroutines is forbidden, use tasks explicitly при использовании aioschedule в Python 3.11

В Python для выполнения задач через определенные интервалы времени, например, при разработке Telegram ботов, часто используется библиотека aioschedule.

К сожалению, пакет aioschedule не обновлялся уже несколько лет и потерял совместимость с последними версиями Python. При использовании в Python 3.11 в момент выполнения задачи выбрасывается ошибка

Passing coroutines is forbidden, use tasks explicitly.

Python: Как проверить, что список A входит в список B

Для того, чтобы убедиться, что список A полностью входит в список B, т.е. все элементы списка A присутствуют в списке B, можно воспользоваться методами «superset» и «subset» стандартного Python класса set.

Конвертация списков в сеты так же позволяет не заботиться о проверке дубликатов, если они имеются в сравниваемых списках.

subset

Метод subset действует от меньшего сета и проверяет, входит ли он в больший сет.

Python: информация об операционной системе

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

system

Метод system() возвращает текстовое название операционной системы:

Python: как сжать строку текста

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

Чтобы заархивировать текстовую строку в памяти, воспользуемся модулем zlib.

Для сжатия строки мы будем использовать функцию compress. Эта функция принимает во входном параметре строку байт и возвращает эту строку в сжатом виде.

Как видно на простейшем примере, объем строки сократился более чем в полтора раза.

Python: Как получить первый найденный в списке элемент

Чтобы получить первый найденный по определенному условию элемент из списка или None, если ни одного такого элемента не найдено, можно использовать следующую конструкцию:

Если результат в списке не найден, будет возвращено None

 

Как узнать текущую версию Python?

Для того, чтобы узнать, какая версия интерпретатора Python используется для выполнения кода, можно воспользоваться командой version_info из модуля sys:

В текущем примере используется версия Python 3.5.2.

Python: Как получить список классов из модуля (*.py — файла)

Список классов, определенных в *.py — файле можно получить с помощью встроенного модуля inspect.

Например для модуля test_cls:

можно получить список классов следующим образом:

 

Python: Как пройти по элементам списка попарно от текущего к следующему

Если имеется список вида:

Для того, чтобы пройти по элементам списка попарно от текущего к следующему, можно использовать такой код:

Результат выполнения:

 

Python: Как передать список аргументов в функцию, принимающую переменное число аргументов

Некоторые функции принимают в параметрах переменное число аргументов *args, как например функция перебора вариантов itertools.product.

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

 

Python: Как преобразовать строку со смешанными диапазонами чисел в список

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

Пусть имеется исходная строка

Разобьем строку по разделителю — запятым:

Разделим получившийся список на два списка. В первый список поместим только отдельные значения. Во второй — значения преобразованные из диапазонов чисел.

Объединим полученные списки в один и выкинем повторяющиеся значения.

Полный код преобразования:

 

Python: как сделать сдвиг значений в списке

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

Сдвиг для списка lst:

сдвиг вперед:

сдвиг назад:

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

Python: Как сохранить словарь (dict) с объектами в json

Для того, чтобы объекты из словаря сохранялись в json в удобном для просмотра виде, каждый класс объекта должен иметь функцию __repr__, возвращающую текстовое представление объекта.

Пример словаря с объектами:

Сохранение словаря с объектами в json:

 

Python: как добавить кортеж в кортеж

Кортежи в python могут быть вложенными.

Если просто добавить один кортеж к другому через операцию конкатенации «+», python сольет значения кортежей:

Для того, чтобы добавляемый кортеж стал вложенным, нужно после добавляемого кортежа поставить запятую «,»

 

Python: Как найти центр многоугольника

Получение координат центральной точки выпуклого многоугольника (полигона), так называемого «центроида», если известны координаты его точек (вершин):

Входным параметром в функцию подается кортеж с координатами точек многоугольника. Функция возвращает кортеж с координатами центроида:

 

Счетчик цикла for в Python не имеет локальной области видимости

Одной из особенностей циклов for в Python является то, что итерируемая переменная (счетчик) не относится к локальной области видимости цикла.

Например, после исполнения следущего участка кода:

Переменная a, объявленная до цикла for, изменит свое значение, если в качестве счетчика цикла объявить переменную с таким же именем «a».

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

Python — многострочное комментирование в PyCharm

В языке Python не предусмотрено внутреннего синтаксиса для многострочного комментирования кода (наподобие /* … */ в других языках). Есть два варианта обхода этой проблемы:

  1. Использовать в качестве комментариев синтаксис многострочного литерала: ′′′

Минут данного метода в том, что подобный комментарий остается строковой константой и встраивается в конечный код.

  1. Если для написания кода используется IDE PyCharm можно выделить несколько строк и нажать комбинацию клавиш: Ctrl + /

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