Флаги преобразования

При форматировании строк доступны 3 флага преобразования объекта в строку: !r, !s и !a. Для фанатов format: Флаг !r вызывает repr(x), а флаг !s вызывает str(x). Флаг !a вызывает ascii(repr(x)). Функция ascii превращает все символы за пределами набора ASCII (включая русские буквы в юникоде) в их коды. Если флаг не указан, то по умолчанию считается,…

exit и компания

У каждого, наверное, было: пишешь в интерпретаторе exit, а он: Что же такое exit? Оказывается это такой класс, а текст — это всего лишь его repr: А еще есть quit – он тоже из этой семьи: Что же приходит при вывозе такого класса? Просто бросается исключение SystemExit, которое, между прочим, можно поймать. Попробуйте: Есть еще…

​​Сортировка пузырьком

Сегодня простая, но важная тема. Алгоритм сортировки пузырьком, его проходят на курсах, его часто спрашивают на собеседованиях. Сортировка — это процесс выстраивания массива или списка по возрастанию или убыванию. На примере чисел: [3, 1, 4, 2] → [1, 2, 3, 4]. Смысл пузырьковой сортировки заключается в следующем: мы начинаем с начала списка и сравниваем элементы…

Класс-декоратор и декоратор класса

Эти две темы не так близки, как кажется, но я не мог разнести их в разные посты, лишая себя такого заголовка. Узнаем, как из класса сделать декоратор, и как написать декоратор для класса. Код примеров доступен в GIST под каждым из разделов. Класс как декоратор Если у класс реализовать магический метод __call__ , то экземпляр…

Декораторы с параметрами

Как я сказал ранее, декоратор – по сути функция с аргументом – другой функцией, но как добавить туда еще аргументы, подобно коду ниже? Справа от знака собачки (@) в синтаксисе декоратора должен стоять какой-то вызываемый объект (т.е. тот, который можно вызвать как функцию), короче нечто foo, которое будет вызвано, как foo(f) в процессе декорации, где…