№ 4931117861 Публикуем интересные/полезные фичи/библиотеки языка. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorpy
Атрибут __all__
Атрибут __all__
используется для контроля того, какие элементы модуля экспортируются при импорте с помощью from module import *
.
Этот атрибут должен содержать список имен, которые будут экспортированы.
Если __all__
не определен, то при импорте будут экспортированы все имена, не начинающиеся с _
.
Использование __all__
позволяет явно указать автору модуля, какие части модуля являются публичным API, а какие — внутренней реализацией.
Это способствует лучшей структуре кода и предотвращает неожиданный экспорт внутренних элементов модуля.
Проще говоря, __all__
— это простой механизм контроля области видимости при импорте. Он помогает организовать чистый публичный интерфейс модуля.
#это_база
#вопросы_с_собеседований
Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?
Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:
— Реализовать методы __getattr__ и __setattr__ в классе объекта, чтобы преобразовать его в словарь, который уже можно сериализовать в JSON.
— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.
— Создать собственный класс-наследник json.JSONEncoder и переопределить метод default(), чтобы указать как сериализовать нестандартные объекты.
— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.
— Преобразовать объекты в dict или list вручную перед сериализацией с помощью методов объекта или отражения (reflection).
— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
#вопросы_с_собеседований
Как Python ищет модули при импорте?
При импорте модулей интерпретатор следует определенному алгоритму поиска:
1. Сначала проверяются встроенные модули, которые поставляются в составе самого Python.
2. Затем по порядку просматриваются пути, перечисленные в sys.path — глобальной переменной, которая содержит список каталогов для поиска модулей.
По умолчанию в sys.path входят: текущий рабочий каталог скрипта, PYTHONPATH — каталоги указанные в этой переменной окружения, каталоги стандартной библиотеки Python.
3. Если модуль не найден — генерируется исключение ImportError.
Функции, поддерживающие только именованные аргументы (kwargs)
**kwargs (keyword arguments) — это способ передачи произвольного количества именованных аргументов в функцию.
В функциях после позиционных и обычных именованных аргументов указывают параметр **kwargs
.
В kwargs
передаются аргументы в виде ключ-значение. Внутри функции kwargs
становится словарем, где ключи — имена аргументов, значения — значения аргументов.
Благодаря этому через kwargs
можно передать любое количество дополнительных аргументов в функцию.
Если одновременно используются *args
и **kwargs
, то в вызове сначала указываются *args
.
#это_база
collections.MutableMapping
Collections.MutableMapping — это интерфейс, который представляет изменяемое отображение (словарь).
Он наследуется от интерфейса Mapping
и добавляет методы для изменения отображения, такие как __setitem__
, __delitem__
и clear
.
Основное преимущество в использовании MutableMapping
— это возможность передавать экземпляры такого класса в любое API, ожидающее словарь.
Например, во многих функциях в стандартной библиотеке есть параметры типа dict
. Если создать класс, реализующий MutableMapping
, его экземпляры можно будет передавать в такие функции.
3 июля в 18:00 МСК OTUS проводит открытый урок «Как правильно готовить данные для ML‑моделей?».
✔️ Мы разберём, почему чистый датасет решает половину задачи, покажем EDA‑приёмы и соберём полный pipeline предобработки на Python. Всё на живых примерах, которыми делятся практикующие ML‑инженеры.
📖 Участники поймут, как избежать «мусорных» ошибок, упростить обучение моделей и ускорить вывод решений в production.
Спикер Мария Тихонова – PhD Computer Science, Senior Data Scientist и преподаватель одного из крупнейших университетов России.
➡️ Мероприятие проходит в преддверие старта курса «Специализация Machine Learning», участники получат скидку на обучение. Оставьте заявку прямо сейчас: https://otus.pw/jRiI/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Trio
Trio — это библиотека асинхронного программирования для Python, которая упрощает написание высокопроизводительных и масштабируемых приложений. Она основана на модели "async/await" и предоставляет ряд инструментов для работы с асинхронными операциями, такими как сетевые запросы, обработка файлов и I/O.
#для_продвинутых
PyJWT
PyJWT — это библиотека Python для работы с JSON Web Tokens (JWT). JWT — это компактный формат для передачи информации между сторонами, позволяющий обеспечить безопасность и аутентификацию.
#для_продвинутых
🚀Хотите улучшить качество своего кода и повысить его надежность? Присоединяйтесь к открытому вебинару «Основы аннотаций типов в Python» от OTUS!
На вебинаре мы:
- Разберем, что такое аннотации типов и зачем они нужны в Python;
- Ознакомимся с синтаксисом аннотаций типов и их применением;
- Углубимся в mypy — инструмент для статической типизации;
- Обсудим, как аннотации помогают улучшить читаемость кода и выявлять ошибки на этапе разработки.
Этот вебинар подойдет как для начинающих разработчиков, так и для опытных специалистов, стремящихся повысить качество и поддерживаемость своего кода.
⚡️Присоединяйтесь 26 июня в 20:00 и узнайте, как аннотации типов сделают ваш код более безопасным и надежным!
Запишитесь прямо сейчас и получите доступ к вебинару:
https://otus.pw/XDVq/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
ChainMapChainMap
— это инструмент из модуля collections, который позволяет объединить несколько словарей в один объект, доступный как единый словарь. Это удобно, когда вам нужно работать с несколькими словарями, представляющими разные области видимости или контексты, и вам нужно установить приоритеты доступа к данным.
#для_продвинутых
Функция current_thread()
Функция current_thread()
из модуля threading
в Python используется для получения объекта Thread
, представляющего текущий поток выполнения.
В Python 3.10 и более поздних версиях она возвращает:
— «Идентификатор потока» текущего потока. Это ненулевое целое число. Его значение не имеет прямого смысла; оно предназначено как магическое число, которое можно использовать, например, для индексирования словаря потоко-специфичных данных.
— Идентификаторы потоков могут быть переиспользованы, когда один поток завершается, а другой создается.
#для_продвинутых
Вам нравится читать контент на этом канале?
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
Функция scandir()
Функция os.scandir()
в Python используется для получения итератора объектов os.DirEntry
, соответствующих записям в каталоге, заданном указанным путем. Записи возвращаются в произвольном порядке, а специальные записи '.' и '..' всегда будут в начале списка.
#для_продвинутых
Обрабатываем номера телефонов
Пакет phonenumbers основан на библиотеке libphonenumber от Google, которая позволяет форматировать, парсить и проверять номера телефонов.
Основным классом, который представляет номер, является PhoneNumber. Объект можно создать, вызвав метод parse() и передав в аргументы номер телефона в виде строки. Вторым аргументом также можно указать страну.
В целом, пакет использовать достаточно просто, базовые примеры есть на картинке. Также можете посмотреть документацию для более продвинутого использования.
Аргументы командой строки
При запуске программ через терминал можно указывать аргументы через пробел. В Python список этих аргументов хранится в переменной argv
во встроенном модуле sys
.
Первым элементом всегда является имя запускаемого скрипта, вторым и далее — непосредственно сами аргументы.
#вопросы_с_собеседований
Что такое сериализация?
Сериализация — это процесс преобразования объектов в поток байтов для сохранения или передачи.
Это позволяет сохранить состояние объекта в файл или базу данных и восстановить его позже.
Основные преимущества сериализации:
— Сохранение и восстановление объектов между сессиями программы.
— Передача объектов по сети между приложениями и машинами.
— Преобразование объектов в формат хранения, независимый от платформы.
ArgcompleteArgcomplete
— это библиотека для автодополнения аргументов командной строки.
Она позволяет легко добавить автодополнение для argparse
в интерактивных оболочках (например, bash, zsh).
Библиотека работает в разных оболочках (bash, zsh и др.) без изменения кода и обладает простой интеграцией — достаточно декорировать функцию argparse
декоратором @argcomplete.register
.
Основные возможности argcomplete
:
— Автоматическое дополнение имен файлов и каталогов при вводе путей.
— Предложение вариантов для аргументов на основе возможных значений, описанных через argparse.
— Дополнение для подкоманд в приложениях с вложенной структурой команд.
#вопросы_с_собеседований
Что такое фабрика декораторов?
Фабрика декораторов — это особая разновидность функции высшего порядка, которая возвращает декоратор вместо прямого результата. Главное отличие фабрики декораторов от обычного декоратора в том, что она принимает аргументы, которые могут конфигурировать логику декоратора.
Например, фабрика может принимать имя лог-файла, в который будет производиться запись при вызове декорируемой функции. Или уровень логирования вместо простой записи всех вызовов.
Такой подход позволяет создавать переиспользуемые и гибко настраиваемые декораторы для решения разных задач.
Главные преимущества фабрик декораторов — это возможность абстрагироваться от конкретики реализации, избежать дублирования кода и создавать интуитивный API для декораторов с настройками.
Атрибут __slots__
Этот атрибут позволяет ограничить создание новых атрибутов в экземплярах класса. __slots__
определяется как список имен атрибутов в определении класса. Экземпляры класса с __slots__
могут иметь атрибуты только с именами, определенными в __slots__
. Попытка создать новый атрибут приведет к ошибке.
Использование __slots__
экономит память, так как экземпляры не создают словарь __dict__
для атрибутов.__slots__
не наследуются, для каждого подкласса нужно определять свои слоты.
Атрибут полезен, когда заранее известны все атрибуты класса и не нужна динамическая задача новых. Например, для простых данных или immutable классов.
#это_база
collections.Counter
Collections.Counter — это класс, предназначенный для подсчета хешей (hashable объектов).
Он позволяет удобно и эффективно подсчитывать вхождения элементов в какой-либо последовательности.
Основное отличие Counter
от обычного словаря в том, что он не выбрасывает исключение, если ключ не существует, а просто создает новый ключ со значением 0. Это упрощает подсчет элементов.Counter
может принимать на вход любую итерируемую последовательность (список, кортеж и т.д.).
Основные способы использования Counter
:
— Подсчет слов или букв в тексте.
— Подсчет появления элементов в списке или итераторе.
— Нахождение наиболее часто встречающихся элементов.
— Использование при решении задач на вероятность и статистику.
#вопросы_с_собеседований
Что такое замыкание?
Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.
Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.
Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).
В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
VK Weekend Offer: отправьте заявку, пройдите интервью и получите офер!
28–29 июня VK проведёт Weekend Offer для бэкендеров с опытом от трёх лет. Участников со знанием Java, Go, Python или C++ ждут технические собеседования, знакомство с продуктами и, если всё сложится, офер уже в конце выходных.
Ребята много лет создают облачные решения, системы рекомендаций и поисковые движки — всё с миллионами пользователей в проде — и сейчас ищут новых коллег. Поэтому оставляйте заявку до 25 июня, чтобы попасть в команду за выходные!
Подробности — на сайте.
Функция vonmisesvariate
Функция vonmisesvariate
из модуля random
в Python используется для генерации случайных чисел, подчиненных распределению фон Мизеса, также известному как круговое нормальное распределение или распределение Тихонова.
Аргументы функции:mu
: Среднее значение угла, выраженное в радианах в диапазоне от 0 до 2π.kappa
: Параметр концентрации, который должен быть больше или равен 0. Чем больше значение kappa
, тем более концентрируется распределение вокруг среднего значения.
#для_продвинутых
uniformvariate uniformvariate
– это функция из библиотеки numpy
, которая используется для генерации случайных чисел из равномерного распределения.
Синтаксис:
numpy.random.uniformvariate(low, high, size=None)
low (float)
: Нижняя граница диапазона.high (float)
: Верхняя граница диапазона.size (int, optional)
: Размер возвращаемого массива.🧑🏻💻Хотите освоить один из самых востребованных языков программирования и стать Python-разработчиком?
Присоединяйтесь к курсу «Python Developer. Basic» от OTUS! В рамках курса вы:
- освоите базовый синтаксис Python;
- изучите фреймворки FastAPI и Django;
- научитесь работать с базами данных и API;
- поймете основы автотестирования, асинхронного программирования и разработки на Python.
Вы научитесь создавать веб-приложения, чат-ботов, парсить сайты и работать с данными — всё это сделает вас ценным специалистом. Программа курса составлена практикующими экспертами и обновляется в соответствии с актуальными требованиями рынка.
⚡️Оставьте заявку прямо сейчас и получите скидку на обучение: https://otus.pw/chmlD/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Функция statvfs
Функция statvfs()
используется для получения информации о файловой системе, содержащей указанный путь. Она возвращает объект класса os.statvfs_result
, атрибуты которого представляют информацию о файловой системе.
#для_продвинутых
Функция getweakrefcount()
Функция weakref.getweakrefcount()
в Python возвращает количество слабых ссылок и прокси-объектов, связанных с данным объектом.
Синтаксис:
weakref.getweakrefcount(object)
object
: объект, для которого нужно узнать количество слабых ссылок и прокси-объектов.Ты будешь жалеть, что не узнал это о девушках раньше.
На канале Творчество чувств автор с многолетним опытом всех форматов отношений рассказывает о тонкостях женской психологии, которые ВАЖНО узнать перед тем, как подкатывать к той самой:
— Почему 95% девушек непригодны для построения отношений?
— 3 признака, кричащие о том, что девушка точно изменит в будущем
— Как за несколько сообщений влюбить в себя любую девушку
Подпишись и узнай секрет женской симпатии:
t.me/+NcZ3vFzbiY5mYWI6
Проверка истинности объекта класса
Для того, чтобы определить поведение при проверке на истинность объектов классов в python3 есть "магический" метод __bool__()
, который был добавлен на замену устаревшему __nonzero__()
в python2.
Если данный метод определен в классе, то он будет вызываться при каждой проверке объекта на истинность а также с помощью функции bool()
. Метод должен возвращать False
или True
.
Если __bool__()
не определен, будет вызываться метод __len__()
, если он определен, и, соответственно, объект будет считаться истинным, если результат __len__()
не будет равен нулю. Если в классе не определены ни __len__()
, ни __bool__()
, все его экземпляры будут истинными.
#vacancy #вакансия #Python #Tech_Lead
Technical Lead Backend на Python в Фемиду
Яндекс
Москва, Санкт-Петербург
гибрид /удалёнка
Tech Lead
Фемида — это система, которая делает наём в Яндексе по-настоящему быстрым, эффективным и современным. Внутри Яндекса мы позволяем автоматизировать подбор лучших кандидатов, и наш сервис уже используется не только в России, но и в других странах, помогая компаниям по всему миру расти и развиваться быстрее.
Вы станете главным архитектором и техническим драйвером backend-направления в одной из ключевых команд. Главная ставка — на умение продумывать архитектуру, развивать сервисы и доводить их до идеального состояния для бизнеса и конечных пользователей. People management не требуется: команда ждёт человека, внутри которого — двигатель профессионализма и архитектурной зрелости!
Почему это классная возможность
• Прямая ответственность за архитектуру продукта, который превращает наём в суперсилу огромной компании.
• Редкий шанс строить сервис под себя — вокруг сильной команды без жёсткой бюрократии. Зато у нас высокие требования к самостоятельности, гибкости, умению находить лучшие решения.
• Простор для технических экспериментов: приветствуются идеи, спор, драйв и желание не просто поддерживать, а развивать. Если вы мечтаете оставить свою подпись в архитектуре крупного продукта с реальным влиянием на весь Яндекс — откликайтесь!
Какие задачи вас ждут
Декомпозиция монолита
Спроектировать и реализовать отделение одного или нескольких сервисов от большого монолита, выстраивать современную микросервисную архитектуру.
Архитектура и ролевые модели
Переработать и усовершенствовать ролевую модель, сделать её гибкой, прозрачной, безопасной.
Производительность
Вести рефакторинг сложного кода, строить систему метрик и алертинга для контроля производительности.
Влияние
Работать над платформой, которой пользуются топовые рекрутеры и СТО Яндекса; каждый релиз - вклад в развитие бизнеса.
Мы ждем, что вы
• Шикарно владеете Python, знаете и любите его глубоко
• Продумывали архитектуру, запускали сервисы с нуля, рефакторили масштабные решения
• Плотно работали с PostgreSQL, MongoDB, Redis, умеете оптимизировать запросы
• Глубоко понимаете современные Python-фреймворки (Django, FastAPI, Flask)
• Писали и интегрировали RESTful API, разбираетесь в HTTP, JSON, умеете документировать API
• Знаете, как построить тестовую инфраструктуру (PyTest, unittest и др.), автоматизацию CI/CD (хотя бы на уровне GitLab)
• Знаете методы аутентификации (OAuth, JWT), методы защиты (CSRF, XSS)
• Умеете быстро анализировать, находить и чинить bottlenecks в сложных системах
• И главное — хотите влиять на бизнес и продукт, а не просто закрывать таски
Будет плюсом, если вы
• Работали с Docker, Kubernetes, облаками (любым провайдером)
• Писали на Go и не боитесь пару строчек легаси поддержать
• Любите писать понятную документацию кода, ввели привычку делать Docstrings и Sphinx (или аналоги)
• Инициативны, не боитесь предлагать перемены, умеете убедительно их внедрять
С нас как всегда: помимо интересных задач — ДМС, развитие, спорт, скидки и пр.
Узнать подробнее и откликнуться.