Forwarded from Python School
Процесс делегирования в Python (ч.2)
В примере показан класс, охватывающий поведение файла и преобразующий данные из нижнего в верхний регистр
Метод write() в классе upcase конвертирует строку из нижнего в верхний регистр до вызова другого метода. Собственно сама делегация осуществляется за счет использования объекта self._out.
В примере показан класс, охватывающий поведение файла и преобразующий данные из нижнего в верхний регистр
Метод write() в классе upcase конвертирует строку из нижнего в верхний регистр до вызова другого метода. Собственно сама делегация осуществляется за счет использования объекта self._out.
Forwarded from Python Academy
Сопоставление шаблонов в python 3.10
Уже сегодня, 4-го октября, должна выйти в релиз версия Python 3.10, но пока этого еще не произошло)
Одной из добавленных фишек стала конструкция сопоставления с шаблоном
В с++ допускается проверка только целочисленных типов и перечислений, в java, с#, go... также помимо этого еще возможно использовать в
В python решили не ограничиваться данной функциональностью и добавить возможность работать с любыми типами. Помимо этого мы можем добавлять в шаблоны альтернативу, перечисляя все возможные значения через оператор
#switch #match
Уже сегодня, 4-го октября, должна выйти в релиз версия Python 3.10, но пока этого еще не произошло)
Одной из добавленных фишек стала конструкция сопоставления с шаблоном
match/case
по аналогии с конструкцией switch/case
из других языков. Для тех, кто вообще не понимает о чем речь, switch/case
- это конструкция, позволяющая определить различное поведение в зависимости от значения передаваемого паттерна.В с++ допускается проверка только целочисленных типов и перечислений, в java, с#, go... также помимо этого еще возможно использовать в
switch/case
строки. В python решили не ограничиваться данной функциональностью и добавить возможность работать с любыми типами. Помимо этого мы можем добавлять в шаблоны альтернативу, перечисляя все возможные значения через оператор
|
(или), а также работать с более сложными вложенными шаблонами и накладывать однострочные условия на шаблон.#switch #match
Forwarded from Python Academy
Специальная переменная __name__
Когда интерпретатор Python читает файл, то сначала он устанавливает несколько специальных переменных (пример). Одной из таких переменных является
Если скрипт был запущен напрямую, то в переменную присваивается значение
Типичный пример использования такой переменной — создание точки входа в программу. Про это уже был ранее пост.
Вообще атрибут
#переменные
Когда интерпретатор Python читает файл, то сначала он устанавливает несколько специальных переменных (пример). Одной из таких переменных является
__name__
.Если скрипт был запущен напрямую, то в переменную присваивается значение
__main__
, в случае импорта — название модуля.Типичный пример использования такой переменной — создание точки входа в программу. Про это уже был ранее пост.
Вообще атрибут
__name__
по умолчанию также ставится всем классам и функциям.#переменные
Forwarded from Python Academy
Дизассемблирование
При запуске программы на python, написанный код преобразуется в байт-код, который затем может быть запущен в интерпретаторе Python. Встроенный модуль
На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы.
#модули #байткод
При запуске программы на python, написанный код преобразуется в байт-код, который затем может быть запущен в интерпретаторе Python. Встроенный модуль
dis
позволяет дизассемблировать байт-код в удобное представление для просмотра его инструкций. Полный спсиок инструкций байт-кода с описанием можно посмотреть в доке модуля.На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы.
#модули #байткод
Forwarded from Python Academy
Шаблоны строк для форматирования
Класс
Такой способ появился ещё в Python 2.4, как замена %-форматированию, но популярным так и не стал. Он поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод
#строки
Класс
Template
из пакета string
в стандартной библиотеке позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.Такой способ появился ещё в Python 2.4, как замена %-форматированию, но популярным так и не стал. Он поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод
format
, но всё же о Template
стоит хотя бы знать на случай, если придется работать с легаси кодом.#строки
Forwarded from Python Academy
Всем привет!
25-26 ноября в Москве состоится крупнейшая в Европе IT-конференция HighLoad++ 2021.
🔥В программе — более 130 докладов, каждый из которых решает конкретную задачу. Но конференция — это не только доклады.
На HighLoad++ 2021 вы легко сможете пообщаться с ТОПами IT-индустрии и найти ответы на свои вопросы. А хотите получить персональную консультацию от разработчиков технологий, на которых построен ваш проект? Приходите! Что ещё? Узнаете, как устроены Тинькоф, Яндекс, ВКонтакте, МТС, Mail.ru, Avito и другие крупные проекты.
😎Влиться в профессиональное комьюнити, завязать полезные знакомства, обновить свою базу знаний и найти решение для сложных задач — всё это на одной площадке.
Приходите на HighLoad++ 2021! 25-26 ноября, Москва.
👉 https://www.highload.ru/moscow/2021?utm_source=python_academy&utm_medium=tg&utm_term=2021-10-08
25-26 ноября в Москве состоится крупнейшая в Европе IT-конференция HighLoad++ 2021.
🔥В программе — более 130 докладов, каждый из которых решает конкретную задачу. Но конференция — это не только доклады.
На HighLoad++ 2021 вы легко сможете пообщаться с ТОПами IT-индустрии и найти ответы на свои вопросы. А хотите получить персональную консультацию от разработчиков технологий, на которых построен ваш проект? Приходите! Что ещё? Узнаете, как устроены Тинькоф, Яндекс, ВКонтакте, МТС, Mail.ru, Avito и другие крупные проекты.
😎Влиться в профессиональное комьюнити, завязать полезные знакомства, обновить свою базу знаний и найти решение для сложных задач — всё это на одной площадке.
Приходите на HighLoad++ 2021! 25-26 ноября, Москва.
👉 https://www.highload.ru/moscow/2021?utm_source=python_academy&utm_medium=tg&utm_term=2021-10-08
Forwarded from Python Academy
Копируем объекты
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию
В случае с
#copy
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию
copy
из стандартной библиотеки, то новый объект будет создан, но его ссылки на другие объекты останутся такими же.В случае с
deepcopy
произойдет рекурсивное копирование. Например, при таком копировании списка все его элементы также скопируются как новые объекты.#copy
Forwarded from Python Community
⚡️ Интерактивный интерпретатор IPython. Часть 2
IPython — гораздо более удобный интерпретатор для шелла Python. О нём и его особенностях мы рассказывали ранее. В этот раз поговорим о его командах:
Знак вопроса (?) после переменной выдаст информацию о ней. Тип, несколько данных относительно объекта и строку документации.
%pip — запускает pip из интерпретатора и выполняет переданные команды.
%run — запускает python файл. Принимает аргументы, расписанные тут.
%autocall — задаёт режим запуска команды. При значении 0 будет выводить функцию как строку, а при 2 — запускать команду с значениями по умолчанию.
Подробнее все команды можно изучить здесь.
#миниурок #IPython
IPython — гораздо более удобный интерпретатор для шелла Python. О нём и его особенностях мы рассказывали ранее. В этот раз поговорим о его командах:
Знак вопроса (?) после переменной выдаст информацию о ней. Тип, несколько данных относительно объекта и строку документации.
%pip — запускает pip из интерпретатора и выполняет переданные команды.
%run — запускает python файл. Принимает аргументы, расписанные тут.
%autocall — задаёт режим запуска команды. При значении 0 будет выводить функцию как строку, а при 2 — запускать команду с значениями по умолчанию.
Подробнее все команды можно изучить здесь.
#миниурок #IPython
Forwarded from Python School
Именованные кортежи, как альтернативы классам в Python.
Если нет желания создавать новый класс и предполагаемая структура не слишком сложна и без дополнительных функций, тогда можно использовать именованные кортежи.
Для понимания:
Именованные кортежи определяют имена для каждой позиции в кортеже и позволяют создавать более читаемый и понятный код. Они могут быть использованы в тех же случаях, что и обычные кортежи, а обращаться к полям можно не только по индексу, но и по имени.
Если нет желания создавать новый класс и предполагаемая структура не слишком сложна и без дополнительных функций, тогда можно использовать именованные кортежи.
Для понимания:
Именованные кортежи определяют имена для каждой позиции в кортеже и позволяют создавать более читаемый и понятный код. Они могут быть использованы в тех же случаях, что и обычные кортежи, а обращаться к полям можно не только по индексу, но и по имени.
Forwarded from Python School
Замер времени выполнения куска кода с помощью модуля «timeit».
Модуль timeit позволяет замерить время выполнения любого куска кода.
Большие куски кода не очень удобно, но вот мелкие довольно хорошо. Закидываете вашу строчку внутрь timeit и вуаля.
Модуль timeit позволяет замерить время выполнения любого куска кода.
Большие куски кода не очень удобно, но вот мелкие довольно хорошо. Закидываете вашу строчку внутрь timeit и вуаля.
Forwarded from Python Academy
Валидаторы данных
Как правило, разработчики пишут регулярные выражения для обработки специфических строк. Но для таких данных как, почта или ссылка, изобретать велосипед не нужно.
Модуль
Помимо этого,
#validators
Как правило, разработчики пишут регулярные выражения для обработки специфических строк. Но для таких данных как, почта или ссылка, изобретать велосипед не нужно.
Модуль
validators
позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.Помимо этого,
validators
позволяет также работать с ipv4, ipv6, mac адресами и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.#validators
Forwarded from Python Academy
Копируем объекты
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию
В случае с
#copy
При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.
Если использовать функцию
copy
из стандартной библиотеки, то новый объект будет создан, но его ссылки на другие объекты останутся такими же.В случае с
deepcopy
произойдет рекурсивное копирование. Например, при таком копировании списка все его элементы также скопируются как новые объекты.#copy
Forwarded from Python School
Как эффективно по отношению к памяти сравнить два неупорядоченных списка
Давайте предположим, что у вас есть два списка, которые содержат одинаковые элементы. Однако эти элементы стоят в разном порядке.
Два списка содержат одни и те же элементы, а вот их порядок отличается. Давайте посмотрим, как мы можем удостовериться, что перед нами два одинаковых списка.
• Мы можем использовать метод collections.Counter
• Можно использовать sorted(), если объекты поддаются порядку.
Давайте предположим, что у вас есть два списка, которые содержат одинаковые элементы. Однако эти элементы стоят в разном порядке.
Два списка содержат одни и те же элементы, а вот их порядок отличается. Давайте посмотрим, как мы можем удостовериться, что перед нами два одинаковых списка.
• Мы можем использовать метод collections.Counter
• Можно использовать sorted(), если объекты поддаются порядку.
Forwarded from HABR FEED + OPENNET
[Перевод] Разбираемся с параллельными и конкурентными вычислениями в Python
https://habr.com/ru/post/581994/?utm_source=habrahabr&utm_medium=rss&utm_campaign=581994
Tags: Блог компании Wunder Fund, Python, Программирование, разработка, asyncio, parallelism, concurrency, multithreading
Author mr-pickles #habr
https://habr.com/ru/post/581994/?utm_source=habrahabr&utm_medium=rss&utm_campaign=581994
Tags: Блог компании Wunder Fund, Python, Программирование, разработка, asyncio, parallelism, concurrency, multithreading
Author mr-pickles #habr
Хабр
Разбираемся с параллельными и конкурентными вычислениями в Python
Я собираюсь рассказать историю о еде, раскрывающую различные возможности конкурентного и параллельного выполнения кода в Python. Прим. Wunder Fund: для задач, где не критичны экстремально низкие...
Forwarded from HABR FEED + OPENNET
SQL в SQLAlchemy
https://habr.com/ru/post/581304/?utm_source=habrahabr&utm_medium=rss&utm_campaign=581304
Tags: Блог компании ДомКлик, Python, PostgreSQL, SQL, python, оптимизация, запросы, sql, postgresql
Author alexey_and_kazakov #habr
https://habr.com/ru/post/581304/?utm_source=habrahabr&utm_medium=rss&utm_campaign=581304
Tags: Блог компании ДомКлик, Python, PostgreSQL, SQL, python, оптимизация, запросы, sql, postgresql
Author alexey_and_kazakov #habr
Хабр
SQL в SQLAlchemy
Меня зовут Алексей Казаков, я техлид команды «Клиентские коммуникации» в Домклик. По моему опыту подавляющее большинство приложений, взаимодействующих с базой данных, использовали для этого Object...
Forwarded from Python Academy
Именованные кортежи
Кстати,
Из названия понятно, что в основе этой структуры лежит привычный всем кортеж. Если кто не помнит, то это как список, но неизменяемый.
Функция
В аргументы мы передаем название нового класса и список атрибутов.
Здесь еще удобно то, что мастхэв функционал типа вывода на экран и сравнения похожих объектов также уже реализован.
#namedtuple
Кстати,
namedtuple
из collections
можно также использовать для хранения данных, как и классы данных, про которые я писал в предыдущем посте.Из названия понятно, что в основе этой структуры лежит привычный всем кортеж. Если кто не помнит, то это как список, но неизменяемый.
Функция
namedtuple
создает новые классы-заготовки, на основе которых уже можно создавать объекты для дальнейшего хранения данных.В аргументы мы передаем название нового класса и список атрибутов.
Здесь еще удобно то, что мастхэв функционал типа вывода на экран и сравнения похожих объектов также уже реализован.
#namedtuple
Forwarded from Python Academy
Классы данных
Еще в Python 3.7 добавили такую мощную штуку, как классы данных. Они призваны автоматизировать генерацию кода классов, которые используются для хранения данных.
Встроенный модуль
Важно отметить, что аннотации типов обязательны. Все поля, которые не имеют отметок о типе будут проигнорированы. Конечно, если вы не хотите использовать конкретный тип, вы можете указать
В результате вы автоматически получаете класс, с реализованными методами
#dataclass
Еще в Python 3.7 добавили такую мощную штуку, как классы данных. Они призваны автоматизировать генерацию кода классов, которые используются для хранения данных.
Встроенный модуль
dataclasses
содержит декоратор @dataclass
. С его использованием код будет выглядеть лаконично и коротко. Пример на картинке выше.Важно отметить, что аннотации типов обязательны. Все поля, которые не имеют отметок о типе будут проигнорированы. Конечно, если вы не хотите использовать конкретный тип, вы можете указать
Any
из модуля typing
.В результате вы автоматически получаете класс, с реализованными методами
__init__
, __repr__
, __str__
и __eq__
. Кроме того, это будет обычный класс и вы можете наследоваться от него или добавлять произвольные методы.#dataclass
Forwarded from HABR FEED + OPENNET
Порараз бирацца: как мы учились писать автотесты на Python и что у нас получилось
https://habr.com/ru/post/582990/?utm_source=habrahabr&utm_medium=rss&utm_campaign=582990
Tags: Блог компании Магнит, Разработка веб-сайтов, Тестирование IT-систем, Тестирование веб-сервисов, pytest, selenium-webdriver, python, ci cd, devops
Author aleksandra_zay #habr
https://habr.com/ru/post/582990/?utm_source=habrahabr&utm_medium=rss&utm_campaign=582990
Tags: Блог компании Магнит, Разработка веб-сайтов, Тестирование IT-систем, Тестирование веб-сервисов, pytest, selenium-webdriver, python, ci cd, devops
Author aleksandra_zay #habr
Forwarded from Python School
Метод get() у словарей и его «дефолтный» результат.
Немножко теории: метод get() возвращает значение для искомого ключа. Если ключ недоступен, возвращает значение по умолчанию.
Метод get() возвращает значение по ключу если такой ключ присутсвует в списке, если его нет, то метод возвращает дефолтное значение.
Если же мы напишем nameforuserid.get(5454) без указания «дефолтного» значения, то функция вернет None. Довольно удобно и практично.
Немножко теории: метод get() возвращает значение для искомого ключа. Если ключ недоступен, возвращает значение по умолчанию.
Метод get() возвращает значение по ключу если такой ключ присутсвует в списке, если его нет, то метод возвращает дефолтное значение.
Если же мы напишем nameforuserid.get(5454) без указания «дефолтного» значения, то функция вернет None. Довольно удобно и практично.