Метод join у строк
У строк есть полезный метод
Как результат получаем новую строку, которая является объединением всех элементов. При этом они разделены строкой, к которой изначально применялся метод.
Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.
#строки
У строк есть полезный метод
str.join()
, который принимает на вход итерируемый объект, элементами которого также должны быть строки.Как результат получаем новую строку, которая является объединением всех элементов. При этом они разделены строкой, к которой изначально применялся метод.
Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.
#строки
Аннотация типов
Тайп хинтинг был добавлен в 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
Оффер от Яндекса за два дня 🔥
Яндекс проводит очередной Weekend Offer, и это отличная возможность получить оффер для тех, кто занимается бекэнд разработкой уже больше 2-х лет и умеет писать на С++/Java/Python/C#/Go/Kotlin/Scala. До 7 ноября нужно зарегистрироваться и пройти автоматизированный отбор в Яндекс.Контесте, а 13-14 ноября написать 2 классных кода и пройти финальное собеседование с командой. Ну и все, оффер от Яндекса у тебя в руках!
Переходи по ссылке и регистрируйся сейчас.
Яндекс проводит очередной Weekend Offer, и это отличная возможность получить оффер для тех, кто занимается бекэнд разработкой уже больше 2-х лет и умеет писать на С++/Java/Python/C#/Go/Kotlin/Scala. До 7 ноября нужно зарегистрироваться и пройти автоматизированный отбор в Яндекс.Контесте, а 13-14 ноября написать 2 классных кода и пройти финальное собеседование с командой. Ну и все, оффер от Яндекса у тебя в руках!
Переходи по ссылке и регистрируйся сейчас.
Операции с zip архивами
Для работы с
Просмотреть содержимое архива можно с помощью функции
Также этот модуль позволяет создавать свои
#zipfile
Для работы с
zip
файлами можно использовать встроенный модуль zipfile
. Если кто не помнит, то zip
файл — это архив, содержащий сжатые файлы. Просмотреть содержимое архива можно с помощью функции
printdir
, а извлечь все файлы можно вызвав extractfile
. Также этот модуль позволяет создавать свои
zip
архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию. #zipfile
Пишем обратно совместимый код
С помощью пакета
Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются
Штука прикольная, но я не уверен, где это на практике можно использовать, так как почти весь код сейчас либо переписывается на Python 3, либо сразу пишется на нем.
#six
С помощью пакета
six
можно писать код, который запустится и на Python 2, и на Python 3. То есть код получается обратно совместимым.Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются
tkinter
и urllib
. Полная документация проекта находится тут.Штука прикольная, но я не уверен, где это на практике можно использовать, так как почти весь код сейчас либо переписывается на Python 3, либо сразу пишется на нем.
#six
Проверка отношения классов
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции
isinstance(object, classinfo)
и issubclass(class, classinfo)
.instance
- возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.issubclass
— проверяет является ли класс наследником другого класса.Данные функции зачастую применяются в ООП.
#isinstance #issubclass
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
К моему удивлению, далеко не все знают про пакет
schedule
, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule
не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Получаем и задаем лимит рекурсии
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
Но с помощью модуля
И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает
RecursionError
во время создания рекурсивных алгоритмов. Но с помощью модуля
sys
можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
#рекурсия #лимиты
Конструктор класса
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название
Первым аргументом конструктор всегда принимает объект класса, который обозначается как
#классы
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название
__init__()
, и их почти всегда переопределяют. Делается это для того, чтобы назначить свойства объекту и выполнить предварительные действия.Первым аргументом конструктор всегда принимает объект класса, который обозначается как
self
— подробнее про это есть отдельный пост.#классы
Отсутствующие ключи в словаре
При обращении по отсутствующему ключу в словаре мы получим исключение
Для этого создадим свой собственный класс словаря, унаследовавшись от
Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
При обращении по отсутствующему ключу в словаре мы получим исключение
KeyError
. Но мы можем переопределить это поведение.Для этого создадим свой собственный класс словаря, унаследовавшись от
dict
. После чего нам просто необходимо переопределить метод __missing__
, который вызывается в базовой реализации методом dict.__getitem__
при при адресации к отсутствующему ключу. Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
#dict
Работаем с файловыми путями
В стандартной библиотеке есть максимально удобный пакет
Для представления пути к файлу есть класс
Но самой классной фичей является замена
Итого, пакет
#pathlib
В стандартной библиотеке есть максимально удобный пакет
pathlib
для простой работы с файловыми путями. Для представления пути к файлу есть класс
Path
, с объектами которого уже можно производить операции. Например, методы exists()
и is_dir()
проверяют, существует ли файл и является ли он директорией. Но самой классной фичей является замена
os.path.join()
на более удобный и элегантный вариант с использованием слэшей, как показано на картинке. Итого, пакет
pathlib
может стать частичной заменой os
в некоторых случаях при работе с файловыми путями. #pathlib
Разбиение строки на список
У строк есть метод
В качестве аргументов можно передать два значения: сам разделитель (по умолчанию знак пробела) и максимальное количество разделений.
Например, с помощью этого метода можно запросто разделить текст на отдельные слова, передав знак пробела в качестве разделителя.
#списки
У строк есть метод
split()
, который разбивает их по указанному разделителю и возвращает список из отдельных строк.В качестве аргументов можно передать два значения: сам разделитель (по умолчанию знак пробела) и максимальное количество разделений.
Например, с помощью этого метода можно запросто разделить текст на отдельные слова, передав знак пробела в качестве разделителя.
#списки
Флаги явного преобразования
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#строки
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.
Это поле можно использовать для переопределения поведения
format
для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования: !r
— преобразует значение в строку, используя функцию repr()
.!s
— преобразует значение в строку, используя функцию str()
.В примере, в случае с флагом
!r
строка 'Hello'
будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s
— без кавычек (в более удобном для чтения виде). #строки
YaTalks: новый подкаст Яндекса о жизни разработчиков
Будни девелоперов — не только код, но и решение разных вопросов: как проходить собеседования, развивать карьеру, строить личный бренд, привлекать инвестиции в стартапы и многое другое. Такие темы будут обсуждать гости подкаста YaTalks. В повестке первого выпуска — проблема релокации в другие страны и города. Есть ли смысл уезжать, и что может заставить вернуться? Все ответы — в подкасте.
Будни девелоперов — не только код, но и решение разных вопросов: как проходить собеседования, развивать карьеру, строить личный бренд, привлекать инвестиции в стартапы и многое другое. Такие темы будут обсуждать гости подкаста YaTalks. В повестке первого выпуска — проблема релокации в другие страны и города. Есть ли смысл уезжать, и что может заставить вернуться? Все ответы — в подкасте.
YouTube
Подкаст YaTalks. Про релокацию в IT: из России и обратно
С какими сложностями сталкиваются разработчики, решившие переехать за границу? Почему возвращаются обратно? И что на самом деле даёт релокация? В первом выпуске YaTalks Podcast говорим о плюсах и минусах переезда с экспертами из Яндекса, Miro и oCitizens.…
Выводим вложенные словари и списки
При выводе вложенных словарей и списков с помощью обычного
Но в стандартной библиотеке есть модуль
Из интересных аргументов есть
#pprint
При выводе вложенных словарей и списков с помощью обычного
print()
мы получаем всё в одну строчку и в неразборчивом виде. Но в стандартной библиотеке есть модуль
pprint
, который поможет вывести подобное дело в красивом формате — достаточно в коде заменить print()
на pprint.pprint()
.Из интересных аргументов есть
depth
, отвечающий за глубину вложенности при выводе, а также width
, который отвечает за ширину вывода в консоли.#pprint
Превращаем текст в числа
Пакет
Кроме функции
#numerizer
Пакет
Numerizer
преобразует обычный текст в числа. То есть, например, из строки "forty two" можно получить число "42".Кроме функции
numerize
особо выделить нечего, но можете посмотреть гитхаб проекта.#numerizer
Деструкторы
При уничтожении экземпляра класса в большинстве языков вызывается специальный метод, который называется деструктор.
В Python деструктор можно переопределять с помощью магического метода
Вообще деструкторы крайне редко переопределяется в Python, но полезно знать, что именно эти методы отвечают за очистку при удалении объекта.
#классы
При уничтожении экземпляра класса в большинстве языков вызывается специальный метод, который называется деструктор.
В Python деструктор можно переопределять с помощью магического метода
__del__
, который вызовется автоматически при удалении объекта.Вообще деструкторы крайне редко переопределяется в Python, но полезно знать, что именно эти методы отвечают за очистку при удалении объекта.
#классы
Генерируем фейковые данные
Faker — это легкий пакет, позволяющий создавать фейковые данные, которые могут быть полезны в качестве заглушек.
Например, методы
Еще есть метод
Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации.
Плюс здесь еще в том, что данные можно локализировать под свой язык. Для примера мы поставили русский.
#faker
Faker — это легкий пакет, позволяющий создавать фейковые данные, которые могут быть полезны в качестве заглушек.
Например, методы
name()
, addres()
, email()
и job()
создадут для вас случайные имена, адреса, почты и названия работ. Еще есть метод
text()
, который генерирует случайный текст, но, как видите в примере, результат получается неосмысленный. Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации.
Плюс здесь еще в том, что данные можно локализировать под свой язык. Для примера мы поставили русский.
#faker
Получаем атрибуты объекта
Функция
Проще говоря,
А если ничего не передать в аргументы, то функция вернет словарь локальных переменных, как и
#переменные
Функция
vars()
возвращает все атрибуты переданного параметра, в качестве которого может быть почти что угодно: модуль, класс, экземпляр и т. д.Проще говоря,
vars()
возвращает словарь, который хранится в атрибуте __dict__
у переданного объекта.А если ничего не передать в аргументы, то функция вернет словарь локальных переменных, как и
locals()
(про это был пост, кстати).#переменные