Что выведет программа?
Anonymous Quiz
16%
0 1 2 3 0
22%
0 1 2
38%
0 1 2 0
21%
Syntax Error
3%
0 1 2 3 4
Что выведет программа?
Anonymous Quiz
10%
c, b and a abracad0
21%
a, b and c abracadabra
10%
a, b and c abracadcad
59%
c, b and a abracadabra
Что выведет программа?
Anonymous Quiz
45%
111
31%
555
2%
0
8%
Случайное значение
10%
Error
3%
Другое
Senior Python Developer
Что выведет программа?
This media is not supported in your browser
VIEW IN TELEGRAM
Какой контент вы хотите чаще видеть на канале?
Anonymous Poll
20%
Квизы и опросы
80%
Обучающие примеры кода
Senior Python Developer
Какой контент вы хотите чаще видеть на канале?
This media is not supported in your browser
VIEW IN TELEGRAM
Паттерн проектирования Singleton
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
В примере мы проверяем, есть ли значение у атрибута
То есть при вызове конструктора класса
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
__new__ вызывается для создания экземпляра класса перед вызовом __init__. На вход первым аргументом метод принимает сам класс, а возвращать должен уже экземпляр (даже можно экземпляр и другого класса).В примере мы проверяем, есть ли значение у атрибута
instance. Если нет, то присваиваем атрибуту экземпляр этого же класса. А если экземпляр уже создан, то просто его возвращаем.То есть при вызове конструктора класса
Singleton будет возвращаться один и тот же объект из памяти.Добавляем классу большую функциональность
Декоратор
Методы класса привязаны к самому классу, а не его экземпляру. Они могут менять состояние класса, что отразится на всех объектах этого класса, но не могут менять конкретный объект.
Короче говоря,
Декоратор
@classmethod — это метод, который получает класс в качестве параметра, который принято обозначать как cls. Он указывает на класс ToyClass, а не на объект этого класса. Методы класса привязаны к самому классу, а не его экземпляру. Они могут менять состояние класса, что отразится на всех объектах этого класса, но не могут менять конкретный объект.
Короче говоря,
@classmethod — это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.Классы данных (Data classes)
Начиная с версии 3.7 Python предлагает классы данных. Есть несколько преимуществ перед обычными классами или другими альтернативами, такими как возвращение нескольких значений или словарей:
🐍 класс данных требует минимального количества кода;
🐍 вы можете сравнить классы данных, потому что существует
🐍 вы можете легко вывести класс данных для отладки, потому что существует
🐍 классы данных требуют тайп хинты, что уменьшает шанс ошибок.
На картинке пример класса данных в работе.
Начиная с версии 3.7 Python предлагает классы данных. Есть несколько преимуществ перед обычными классами или другими альтернативами, такими как возвращение нескольких значений или словарей:
🐍 класс данных требует минимального количества кода;
🐍 вы можете сравнить классы данных, потому что существует
__eq__;🐍 вы можете легко вывести класс данных для отладки, потому что существует
__repr__;🐍 классы данных требуют тайп хинты, что уменьшает шанс ошибок.
На картинке пример класса данных в работе.
Инкремент с помощью __pos__
В Python нет операции инкремента
При применении унарного плюса у объекта вызывается магический метод
Код на картинке может показаться сначала немного сложным, но лучше проследить логику и понять работу метода
В Python нет операции инкремента
++ как в си-подобных языках, поэтому используется x += 1. Однако запись ++x является валидным кодом (но не x++), так как это просто два унарных оператора сложения.При применении унарного плюса у объекта вызывается магический метод
__pos__, то есть запись ++x можно понять как x.__pos__().__pos__(). Зная это, можно реализовать класс, который будет представлять число и поддерживать поведение инкремента.Код на картинке может показаться сначала немного сложным, но лучше проследить логику и понять работу метода
__pos__. Если реализовать все остальные необходимые магические методы, то может получится полноценный класс числа, но в продакшене такие приколы лучше не писать.Дробные числа
По умолчанию числа с плавающей точкой используют память привычным образом, то есть они хранятся в двоичном виде. Это означает, что вы обычно работаете с приблизительными значениями, а не точными.
Можно использовать тип данных
Поэтому для идеальных вычислений лучше использовать
По умолчанию числа с плавающей точкой используют память привычным образом, то есть они хранятся в двоичном виде. Это означает, что вы обычно работаете с приблизительными значениями, а не точными.
Можно использовать тип данных
Decimal, который предоставит намного большую точность, но и его может не хватить в некоторых случаях. Поэтому для идеальных вычислений лучше использовать
Fraction, который представляет и хранит число в виде рациональной дроби.Сортировка объектов по нескольким ключам
Предположим, мы хотим отсортировать список словарей. Но мы не просто хотим сортировать их, допустим, по имени или возрасту, мы хотим отсортировать их по обоим полям.
На самом деле существует очень простое решение этой проблемы, благодаря гарантии Python, что функции сортировки обеспечивают устойчивость сортировки. Это означает, что элементы, которые сравниваются, сохраняют свой первоначальный порядок.
Чтобы добиться сортировки по имени и возрасту, можно воспользоваться примером с картинки. В нем сначала словарь сортируется по возрасту, а потом по имени. С помощью
Имена сортируются в первую очередь, возраст сортируется, если имя совпадает. Таким образом, все Джоны сгруппированы по возрасту.
Предположим, мы хотим отсортировать список словарей. Но мы не просто хотим сортировать их, допустим, по имени или возрасту, мы хотим отсортировать их по обоим полям.
На самом деле существует очень простое решение этой проблемы, благодаря гарантии Python, что функции сортировки обеспечивают устойчивость сортировки. Это означает, что элементы, которые сравниваются, сохраняют свой первоначальный порядок.
Чтобы добиться сортировки по имени и возрасту, можно воспользоваться примером с картинки. В нем сначала словарь сортируется по возрасту, а потом по имени. С помощью
operator.itemgetter() мы получаем поля возраста и имени из каждого словаря в списке.Имена сортируются в первую очередь, возраст сортируется, если имя совпадает. Таким образом, все Джоны сгруппированы по возрасту.
Превью из длинного текста
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
Первым аргументом передается строка, вторым указывается количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
shorten из модуля textwrap. Первым аргументом передается строка, вторым указывается количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
Находим файлы по шаблону
Основной фишкой модуля
В одноименный метод
Вообще модуль является встроенным, но в некоторых ситуациях импорт может выдать исключение. В таком случае надо просто его переустановить через пакетный менеджер
Основной фишкой модуля
glob является удобная и лаконичная работа с поиском файлов по паттернам. Более того, можно даже пройтись по директориям рекурсивно.В одноименный метод
glob передаётся шаблон для поиска файлов, а возвращается список с результатами. Все методы следуют механизму и правилам сопоставления паттернов в стиле Unix. Вообще модуль является встроенным, но в некоторых ситуациях импорт может выдать исключение. В таком случае надо просто его переустановить через пакетный менеджер
pip.FastAPI
Интересно, что автор фреймворка глубоко изучил несколько других фреймворков, от классических, таких как Django, до более современных, таких как Sanic, а также изучил различные технологии в NestJS (веб-фреймворк Node.js, Typescript).
Фреймворк имеет важную особенность – автоматическая генерация документации: как только ваши эндпойнты будут реализованы, вы сможете поиграться с API, используя соответствующий стандартам пользовательский интерфейс. Поддерживаются SwaggerUI, ReDoc и другие.
FastAPI построен на удивительной библиотеке Starlette, в результате чего производительность сравнима с Node.js, а в некоторых случаях даже Go.
Интересно, что автор фреймворка глубоко изучил несколько других фреймворков, от классических, таких как Django, до более современных, таких как Sanic, а также изучил различные технологии в NestJS (веб-фреймворк Node.js, Typescript).
Фреймворк имеет важную особенность – автоматическая генерация документации: как только ваши эндпойнты будут реализованы, вы сможете поиграться с API, используя соответствующий стандартам пользовательский интерфейс. Поддерживаются SwaggerUI, ReDoc и другие.
FastAPI построен на удивительной библиотеке Starlette, в результате чего производительность сравнима с Node.js, а в некоторых случаях даже Go.