Операции с zip архивами
Для работы с
Просмотреть содержимое архива можно с помощью функции
Также этот модуль позволяет создавать свои
#zipfile
Для работы с
zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл — это архив, содержащий сжатые файлы. Просмотреть содержимое архива можно с помощью функции
printdir, а извлечь все файлы можно вызвав extractfile. Также этот модуль позволяет создавать свои
zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию. #zipfile
👍6🔥2
Пишем обратно совместимый код
С помощью пакета
Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются
Штука прикольная, но я не уверен, где это на практике можно использовать, так как почти весь код сейчас либо переписывается на Python 3, либо сразу пишется на нем.
#six
С помощью пакета
six можно писать код, который запустится и на Python 2, и на Python 3. То есть код получается обратно совместимым.Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются
tkinter и urllib. Полная документация проекта находится тут.Штука прикольная, но я не уверен, где это на практике можно использовать, так как почти весь код сейчас либо переписывается на Python 3, либо сразу пишется на нем.
#six
👍1
Проверка отношения классов
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
isinstance(object, classinfo) и issubclass(class, classinfo).instance - возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.issubclass — проверяет является ли класс наследником другого класса.Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
К моему удивлению, далеко не все знают про пакет
schedule, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
👍3
Получаем и задаем лимит рекурсии
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
Но с помощью модуля
И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
RecursionError во время создания рекурсивных алгоритмов. Но с помощью модуля
sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
Конструктор класса
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название
Первым аргументом конструктор всегда принимает объект класса, который обозначается как
#классы
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название
__init__(), и их почти всегда переопределяют. Делается это для того, чтобы назначить свойства объекту и выполнить предварительные действия.Первым аргументом конструктор всегда принимает объект класса, который обозначается как
self — подробнее про это есть отдельный пост.#классы
Отсутствующие ключи в словаре
При обращении по отсутствующему ключу в словаре мы получим исключение
Для этого создадим свой собственный класс словаря, унаследовавшись от
Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
При обращении по отсутствующему ключу в словаре мы получим исключение
KeyError. Но мы можем переопределить это поведение.Для этого создадим свой собственный класс словаря, унаследовавшись от
dict. После чего нам просто необходимо переопределить метод __missing__, который вызывается в базовой реализации методом dict.__getitem__ при при адресации к отсутствующему ключу. Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
👍2
Работаем с файловыми путями
В стандартной библиотеке есть максимально удобный пакет
Для представления пути к файлу есть класс
Но самой классной фичей является замена
Итого, пакет
#pathlib
В стандартной библиотеке есть максимально удобный пакет
pathlib для простой работы с файловыми путями. Для представления пути к файлу есть класс
Path, с объектами которого уже можно производить операции. Например, методы exists() и is_dir() проверяют, существует ли файл и является ли он директорией. Но самой классной фичей является замена
os.path.join() на более удобный и элегантный вариант с использованием слэшей, как показано на картинке. Итого, пакет
pathlib может стать частичной заменой os в некоторых случаях при работе с файловыми путями. #pathlib
👍1
Разбиение строки на список
У строк есть метод
В качестве аргументов можно передать два значения: сам разделитель (по умолчанию знак пробела) и максимальное количество разделений.
Например, с помощью этого метода можно запросто разделить текст на отдельные слова, передав знак пробела в качестве разделителя.
#списки
У строк есть метод
split(), который разбивает их по указанному разделителю и возвращает список из отдельных строк.В качестве аргументов можно передать два значения: сам разделитель (по умолчанию знак пробела) и максимальное количество разделений.
Например, с помощью этого метода можно запросто разделить текст на отдельные слова, передав знак пробела в качестве разделителя.
#списки
👍2
Флаги явного преобразования
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#строки
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r — преобразует значение в строку, используя функцию repr().!s — преобразует значение в строку, используя функцию str().В примере, в случае с флагом
!r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s — без кавычек (в более удобном для чтения виде). #строки
👍3
YaTalks: новый подкаст Яндекса о жизни разработчиков
Будни девелоперов — не только код, но и решение разных вопросов: как проходить собеседования, развивать карьеру, строить личный бренд, привлекать инвестиции в стартапы и многое другое. Такие темы будут обсуждать гости подкаста YaTalks. В повестке первого выпуска — проблема релокации в другие страны и города. Есть ли смысл уезжать, и что может заставить вернуться? Все ответы — в подкасте.
Будни девелоперов — не только код, но и решение разных вопросов: как проходить собеседования, развивать карьеру, строить личный бренд, привлекать инвестиции в стартапы и многое другое. Такие темы будут обсуждать гости подкаста YaTalks. В повестке первого выпуска — проблема релокации в другие страны и города. Есть ли смысл уезжать, и что может заставить вернуться? Все ответы — в подкасте.
YouTube
Подкаст YaTalks. Про релокацию в IT: из России и обратно
С какими сложностями сталкиваются разработчики, решившие переехать за границу? Почему возвращаются обратно? И что на самом деле даёт релокация? В первом выпуске YaTalks Podcast говорим о плюсах и минусах переезда с экспертами из Яндекса, Miro и oCitizens.…
👍1
Выводим вложенные словари и списки
При выводе вложенных словарей и списков с помощью обычного
Но в стандартной библиотеке есть модуль
Из интересных аргументов есть
#pprint
При выводе вложенных словарей и списков с помощью обычного
print() мы получаем всё в одну строчку и в неразборчивом виде. Но в стандартной библиотеке есть модуль
pprint, который поможет вывести подобное дело в красивом формате — достаточно в коде заменить print() на pprint.pprint().Из интересных аргументов есть
depth, отвечающий за глубину вложенности при выводе, а также width, который отвечает за ширину вывода в консоли.#pprint
👍1
Превращаем текст в числа
Пакет
Кроме функции
#numerizer
Пакет
Numerizer преобразует обычный текст в числа. То есть, например, из строки "forty two" можно получить число "42".Кроме функции
numerize особо выделить нечего, но можете посмотреть гитхаб проекта.#numerizer
❤3👍2
Деструкторы
При уничтожении экземпляра класса в большинстве языков вызывается специальный метод, который называется деструктор.
В Python деструктор можно переопределять с помощью магического метода
Вообще деструкторы крайне редко переопределяется в Python, но полезно знать, что именно эти методы отвечают за очистку при удалении объекта.
#классы
При уничтожении экземпляра класса в большинстве языков вызывается специальный метод, который называется деструктор.
В Python деструктор можно переопределять с помощью магического метода
__del__, который вызовется автоматически при удалении объекта.Вообще деструкторы крайне редко переопределяется в Python, но полезно знать, что именно эти методы отвечают за очистку при удалении объекта.
#классы
👍3
Генерируем фейковые данные
Faker — это легкий пакет, позволяющий создавать фейковые данные, которые могут быть полезны в качестве заглушек.
Например, методы
Еще есть метод
Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации.
Плюс здесь еще в том, что данные можно локализировать под свой язык. Для примера мы поставили русский.
#faker
Faker — это легкий пакет, позволяющий создавать фейковые данные, которые могут быть полезны в качестве заглушек.
Например, методы
name(), addres(), email() и job() создадут для вас случайные имена, адреса, почты и названия работ. Еще есть метод
text(), который генерирует случайный текст, но, как видите в примере, результат получается неосмысленный. Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации.
Плюс здесь еще в том, что данные можно локализировать под свой язык. Для примера мы поставили русский.
#faker
👍2
Получаем атрибуты объекта
Функция
Проще говоря,
А если ничего не передать в аргументы, то функция вернет словарь локальных переменных, как и
#переменные
Функция
vars() возвращает все атрибуты переданного параметра, в качестве которого может быть почти что угодно: модуль, класс, экземпляр и т. д.Проще говоря,
vars() возвращает словарь, который хранится в атрибуте __dict__ у переданного объекта.А если ничего не передать в аргументы, то функция вернет словарь локальных переменных, как и
locals() (про это был пост, кстати).#переменные
👍2
Получение списка имен в объектах
С помощью функции
Для того, чтобы вручную определить для класса выдачу информации по атрибутам для функции
Для классов, в которых не определен
Данную функцию удобно использовать в интерактивном режиме для поиска нужного атрибута, применяя функцию
#dir
С помощью функции
dir() можно получить отсортированный список имен атрибутов и методов, доступных в локальной области. Либо если в функцию передать какой-либо объект dir(object), она вернет список всех имен атрибутов и методов переданного объекта.Для того, чтобы вручную определить для класса выдачу информации по атрибутам для функции
dir(), можно определить в классе метод __dir__().Для классов, в которых не определен
__dir__(), функция соберет информацию по атрибутам из __dict__.Данную функцию удобно использовать в интерактивном режиме для поиска нужного атрибута, применяя функцию
help() по нужному атрибуту для получения документации.#dir
👍1
Генерация капчи
Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль
Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения
#captcha
Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль
captcha и Pillow, который используется для создание изображений в captcha.Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения
ImageCaptcha, на который будет нанесен текст. После чего вызываем метод write с заданным текстом и именем файла, в который будет записано изображение.#captcha
👍5
Получаем исходный код объекта
Встроенный модуль
Сегодня поговорим только про
В аргументы достаточно передать необходимый объект. Но важно отметить, что встроенные функции не получится проинспектировать.
#inspect
Встроенный модуль
inspect помогает разработчикам исследовать уже написанные программы.Сегодня поговорим только про
getsource(), который возвращает весь исходный код функции, класса или модуля в виде строки.В аргументы достаточно передать необходимый объект. Но важно отметить, что встроенные функции не получится проинспектировать.
#inspect
👍7
Проверяем тип объекта
Раз уж в предыдущем посте затронули модуль
Функции
#inspect
Раз уж в предыдущем посте затронули модуль
inspect, то давайте еще поговорим про некоторые его возможности.Функции
ismodule(), isclass(), ismethod() и isfunction() проверяют переданный объект на то, является ли он модулем, классом, методом или функцией соответственно.#inspect
👍4