Forwarded from Python Community
⚡️ Что такое
Продолжаем говорить про импорт модулей. В этот раз разберём, что такое переменная
Думаю, в нескольких ваших скриптах встречается строка по типу
Чтобы не нагружать вашу программу ненужными объектами разработчики вписывают в
Всё элементарно, но чтобы почитать об этом подробнее, можете заглянуть на сайт документации.
#теория
__all__
?Продолжаем говорить про импорт модулей. В этот раз разберём, что такое переменная
__all__
и как её использовать.Думаю, в нескольких ваших скриптах встречается строка по типу
from package import *
, которая импортирует всё из модуля. Но ведь функций/классов может быть намного больше, чем вы думаете.Чтобы не нагружать вашу программу ненужными объектами разработчики вписывают в
__all__
имена доступных типов.Всё элементарно, но чтобы почитать об этом подробнее, можете заглянуть на сайт документации.
#теория
Forwarded from Python Community
⚡️ Работаем с логами
Для этого в Python существует удобный модуль logging, позволяющий управлять логами в пару строк.
О том, какие уровни важности использовать, вы можете почитать в HOWTO, а подробнее о функционале модуля — в документации.
#миниурок #logging
Для этого в Python существует удобный модуль logging, позволяющий управлять логами в пару строк.
logging.getLogger(name=None)
— возвращает экземпляр логера на основе имени. Может быть полезна при разработке модулей.logging.basicConfig(**kwargs)
— позволяет задать настройки модулю, например, имя файла (filename), формат записи (format), уровень важности (level).debug()
, info()
, warning()
, error()
, critical()
— позволяют записывать информацию в логер на определённом уровне важности.О том, какие уровни важности использовать, вы можете почитать в HOWTO, а подробнее о функционале модуля — в документации.
#миниурок #logging
Forwarded from Python Community
⚡️ Очередь с приоритетом
Это — разновидность очередей, в которой у каждого элемента есть свой приоритет. Модуль heapq реализует такую возможность, используя кучи — бинарные деревья, у которых родительский объект имеет значение, меньшее или равное любому из его дочерних узлов.
#миниурок #heapq
Это — разновидность очередей, в которой у каждого элемента есть свой приоритет. Модуль heapq реализует такую возможность, используя кучи — бинарные деревья, у которых родительский объект имеет значение, меньшее или равное любому из его дочерних узлов.
heappush(heap, value)
— добавляет value в heap, сохраняя инвариантность кучи.heappop(heap)
— возвращает наименьшее значение из heap. heapify(x)
— превращает итерируемый объект x в кучу.nsmallest(n, iter)
, nlargest(n, iter)
— позволяют взять n-ное количество минимальных/максимальных элементов из iter.#миниурок #heapq
Forwarded from Python Community
⚡️ Красивый вывод данных
Если вам приходится работать с выводом списков или словарей, то вы можете упростить себе работу, использовав pprint.
indent определяет количество отступов перед объектами, а width — ширину вывода. depth — сколько объектов необходимо рекурсивно раскрывать, а stream — куда записывать все данные (по умолчанию sys.stdout).
#миниурок #pprint
Если вам приходится работать с выводом списков или словарей, то вы можете упростить себе работу, использовав pprint.
PrettyPrinter(indent=1, width=80, depth=None, stream=None)
— Класс, отвечающий за перевод данных в красивый формат. indent определяет количество отступов перед объектами, а width — ширину вывода. depth — сколько объектов необходимо рекурсивно раскрывать, а stream — куда записывать все данные (по умолчанию sys.stdout).
pprint.pprint(object, ...)
— функция, упрощающая работу с классом. Принимает object, который необходимо вывести и те же параметры, что и PrettyPrinter.#миниурок #pprint
Forwarded from Python School
Красивый вывод списка (ч.1)
Обычный формат вывода списка с помощью print не очень удобен. Конечно, становится понятно, что из себя представляет список, но чаще всего пользователь не хочет видеть кавычки вокруг каждого элемента.
Метод join преобразовывает список в строку, рассматривая каждый элемент как строку.
Обычный формат вывода списка с помощью print не очень удобен. Конечно, становится понятно, что из себя представляет список, но чаще всего пользователь не хочет видеть кавычки вокруг каждого элемента.
Метод join преобразовывает список в строку, рассматривая каждый элемент как строку.
Forwarded from Python School
Queue (ч.1)
Python поддерживает многопоточность, в использовании которой помогает стандартный модуль Queue.
Он позволяет реализовывать такую структуру данных, как очередь. Очереди позволяют добавлять и извлекать элементы согласно определённому правилу.
Python поддерживает многопоточность, в использовании которой помогает стандартный модуль Queue.
Он позволяет реализовывать такую структуру данных, как очередь. Очереди позволяют добавлять и извлекать элементы согласно определённому правилу.
Forwarded from Python School
Queue (ч.2)
Очереди «первым пришёл — первым ушёл» («first in, first out», FIFO) позволяют извлекать объекты в порядке их добавления. Из очередей «последним пришёл — первым ушёл» («last in, first out», LIFO) можно извлекать последние добавленные объекты.
Наконец, приоритетные очереди позволяют извлекать объекты согласно порядку их сортировки.
Очереди «первым пришёл — первым ушёл» («first in, first out», FIFO) позволяют извлекать объекты в порядке их добавления. Из очередей «последним пришёл — первым ушёл» («last in, first out», LIFO) можно извлекать последние добавленные объекты.
Наконец, приоритетные очереди позволяют извлекать объекты согласно порядку их сортировки.
Forwarded from Python School
Подсчет вхождений в список
Используйте Counter из библиотеки коллекций, чтобы получить словарь с подсчетом всех уникальных элементов в списке
Используйте Counter из библиотеки коллекций, чтобы получить словарь с подсчетом всех уникальных элементов в списке
Forwarded from Python Community
⚡️ Файлы конфигурации
Вряд ли клиент захочет лезть в код, чтобы поменять порт сервера, поэтому многие программисты создают файлы конфигурации. Работать с ними можно с помощью модуля configparser.
Брать информацию можно используя квадратные скобки или, лучше, методом
Если вы изменили какие-то данные и хотите их сохранить, впишите метод
#миниурок #configparser
Вряд ли клиент захочет лезть в код, чтобы поменять порт сервера, поэтому многие программисты создают файлы конфигурации. Работать с ними можно с помощью модуля configparser.
ConfigParser()
— основной класс для работы с конфигами. Его можно оставить так, а можно загрузить данные, используя метод read(filename)
, который принимает имя файла.Брать информацию можно используя квадратные скобки или, лучше, методом
get(key, default=None)
.Если вы изменили какие-то данные и хотите их сохранить, впишите метод
write(file)
, который принимает IO файл.#миниурок #configparser
Forwarded from Gmail Bot
✉️ Timepad <no-reply@timepad.ru>
Ссылка на трансляцию онлайн-события
Добрый день!
Напоминаем вам, что *8 июля 2021* c *18:00* до *21:00* (московское время) пройдет онлайн-событие *«Python Community Online Meetup»* , на которое вы зарегистрировались.
Вот ваша персональная ссылка на трансляцию: https://raiffeisen-events.timepad.ru/event/webinar_redirect/46853564/3febc73dab0511f65201218e3ef6cf6e95286e87/
Можно переходить уже сейчас и ждать начала.
Timepad
Организуете события? Привлекайте участников и продавайте билеты на timepad.ru. Присоединяйтесь к нам на Facebook и ВКонтакте Служба поддержки:
support@timepad.ru
+7 (495) 212–16–98 (Москва)
8 (800) 300–69–84 (по России)
Время работы (московское):
с 9:00 до 20:00 по будням
с 10:00 до 18:00 по выходным
Ссылка на трансляцию онлайн-события
Добрый день!
Напоминаем вам, что *8 июля 2021* c *18:00* до *21:00* (московское время) пройдет онлайн-событие *«Python Community Online Meetup»* , на которое вы зарегистрировались.
Вот ваша персональная ссылка на трансляцию: https://raiffeisen-events.timepad.ru/event/webinar_redirect/46853564/3febc73dab0511f65201218e3ef6cf6e95286e87/
Можно переходить уже сейчас и ждать начала.
Timepad
Организуете события? Привлекайте участников и продавайте билеты на timepad.ru. Присоединяйтесь к нам на Facebook и ВКонтакте Служба поддержки:
support@timepad.ru
+7 (495) 212–16–98 (Москва)
8 (800) 300–69–84 (по России)
Время работы (московское):
с 9:00 до 20:00 по будням
с 10:00 до 18:00 по выходным
Forwarded from iggisv9t channel
Вот так вот в исходниках CDlib. Просто по порядку пытается импортировать все пакеты. Пакет с пакетами, получается.
Forwarded from Python Academy
Валидаторы данных
Как правило, разработчики пишут регулярные выражения для обработки специфических строк. Но для таких данных как, почта или ссылка, изобретать велосипед не нужно.
Модуль
Помимо этого,
#validators
Как правило, разработчики пишут регулярные выражения для обработки специфических строк. Но для таких данных как, почта или ссылка, изобретать велосипед не нужно.
Модуль
validators
позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.Помимо этого,
validators
позволяет также работать с ipv4, ipv6, mac адресами и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.#validators
Forwarded from Python Academy
Аннотация типов
Тайп хинтинг был добавлен в python еще в версии 3.5 вместе с библиотекой
В python 3.9 была добавлена возможность использовать в качестве дженериков для аннотирования встроенные коллекции, вместо структур
И наконец в 3.10 на замену перечисления возможных принимаемых типов через
#typing #typealias
Тайп хинтинг был добавлен в python еще в версии 3.5 вместе с библиотекой
typing
, в которой содержались структуры нужные для создания дженериков для аннотирования переменных. Тогда синтаксис аннотирования работал при инициализации переменных. В последствии в версии 3.6 эта возможность была расширена и стало возможно объявлять типы переменных вообще в любом месте кода.В python 3.9 была добавлена возможность использовать в качестве дженериков для аннотирования встроенные коллекции, вместо структур
typing
'а (List
, Dict
, Tuple
...).И наконец в 3.10 на замену перечисления возможных принимаемых типов через
typing.Union
пришел опреатор |
(or
). Также в 3.10 был изменен синтаксис создания тайпалиасов, чтобы разграничить с присваиванием переменной, теперь лучше это делать непосредственно через TypeAlias
.#typing #typealias
Forwarded from Python Academy
Операции с zip архивами
Для работы с
Просмотреть содержимое архива можно с помощью функции
Также этот модуль позволяет создавать свои
#zipfile
Для работы с
zip
файлами можно использовать встроенный модуль zipfile
. Если кто не помнит, то zip
файл — это архив, содержащий сжатые файлы. Просмотреть содержимое архива можно с помощью функции
printdir
, а извлечь все файлы можно вызвав extractfile
. Также этот модуль позволяет создавать свои
zip
архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию. #zipfile
Forwarded from Python Academy
Проверка отношения классов
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
isinstance(object, classinfo)
и issubclass(class, classinfo)
.instance
- возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.issubclass
— проверяет является ли класс наследником другого класса.Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Forwarded from Python Academy
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
К моему удивлению, далеко не все знают про пакет
schedule
, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule
не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Forwarded from Python Academy
Отсутствующие ключи в словаре
При обращении по отсутствующему ключу в словаре мы получим исключение
Для этого создадим свой собственный класс словаря, унаследовавшись от
Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
При обращении по отсутствующему ключу в словаре мы получим исключение
KeyError
. Но мы можем переопределить это поведение.Для этого создадим свой собственный класс словаря, унаследовавшись от
dict
. После чего нам просто необходимо переопределить метод __missing__
, который вызывается в базовой реализации методом dict.__getitem__
при при адресации к отсутствующему ключу. Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
Forwarded from Python Academy
Работаем с файловыми путями
В стандартной библиотеке есть максимально удобный пакет
Для представления пути к файлу есть класс
Но самой классной фичей является замена
Итого, пакет
#pathlib
В стандартной библиотеке есть максимально удобный пакет
pathlib
для простой работы с файловыми путями. Для представления пути к файлу есть класс
Path
, с объектами которого уже можно производить операции. Например, методы exists()
и is_dir()
проверяют, существует ли файл и является ли он директорией. Но самой классной фичей является замена
os.path.join()
на более удобный и элегантный вариант с использованием слэшей, как показано на картинке. Итого, пакет
pathlib
может стать частичной заменой os
в некоторых случаях при работе с файловыми путями. #pathlib
Forwarded from Python Academy
Флаги явного преобразования
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#строки
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
format
для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r
— преобразует значение в строку, используя функцию repr()
.!s
— преобразует значение в строку, используя функцию str()
.В примере, в случае с флагом
!r
строка 'Hello'
будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s
— без кавычек (в более удобном для чтения виде). #строки