В чем разница между списками и массивами?
Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально будем обсуждать массив из популярной библиотеки Numpy.
Списки в каждом индексе можно заполнять разными типами данных. Массивы требуют однородных элементов.
Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.
Массивы используют меньше памяти и обладают значительно большей функциональностью.
Библиотека задач по Python
Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально будем обсуждать массив из популярной библиотеки Numpy.
Списки в каждом индексе можно заполнять разными типами данных. Массивы требуют однородных элементов.
Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.
Массивы используют меньше памяти и обладают значительно большей функциональностью.
Библиотека задач по Python
Вы обрабатываете большие массивы числовых данных в Python, и профилирование показывает, что большинство времени тратится на циклы for со встроенными типами. Какой подход наиболее правильный для оптимизации?
👾 — Разбить массивы на списки поменьше и обрабатывать их по частям
👍 — Использовать специализированные библиотеки (например, NumPy), которые выполняют векторные операции вне GIL
🥰 — Переписать цикл на вложенные list comprehension
⚡️ — Принудительно запускать gc.collect() после каждой итерации
Библиотека задач по Python
👾 — Разбить массивы на списки поменьше и обрабатывать их по частям
👍 — Использовать специализированные библиотеки (например, NumPy), которые выполняют векторные операции вне GIL
🥰 — Переписать цикл на вложенные list comprehension
⚡️ — Принудительно запускать gc.collect() после каждой итерации
Библиотека задач по Python
Что значит *args, **kwargs? И зачем нам их использовать?
Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
Библиотека задач по Python
Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
Библиотека задач по Python
👍1
Что выведет код:
print(type({}) is set)
👾 — False
👍 —True
🥰 — None
⚡️ — Ничего
Библиотека задач по Python
print(type({}) is set)
👾 — False
👍 —True
🥰 — None
⚡️ — Ничего
Библиотека задач по Python
Что делает функция sample?
Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.
Это удобно при необходимости получить случайную выборку из данных.
Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.
Дополнительные аргументы:
counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).
Библиотека задач по Python
Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.
Это удобно при необходимости получить случайную выборку из данных.
Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.
Дополнительные аргументы:
counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).
Библиотека задач по Python
👍1
Что означает RPO?
👾 — Максимально допустимая длительность простоя
👍 — Цель по времени восстановления сервиса
🥰 — Максимально допустимая потеря данных во времени
⚡️ — Среднее время до отказа
Библиотека задач по Python
👾 — Максимально допустимая длительность простоя
👍 — Цель по времени восстановления сервиса
🥰 — Максимально допустимая потеря данных во времени
⚡️ — Среднее время до отказа
Библиотека задач по Python
Чем корректно отдавать большой поток данных?
👾 — Response с JSON
👍 — StreamingResponse
🥰 — FileResponse всегда загружает весь файл в память
⚡️ — HTMLResponse
Библиотека задач по Python
👾 — Response с JSON
👍 — StreamingResponse
🥰 — FileResponse всегда загружает весь файл в память
⚡️ — HTMLResponse
Библиотека задач по Python
Что даёт asyncio.TaskGroup по сравнению с gather?
👾 — Запускает задачи параллельно и скрывает исключения
👍 — При первом исключении отменяет остальные, дожидается их и выбрасывает ошибку после with
🥰 — Выполняет задачи строго последовательно
⚡️ — Требует вручную вызывать cancel() для каждой задачи при ошибке
Библиотека задач по Python
👾 — Запускает задачи параллельно и скрывает исключения
👍 — При первом исключении отменяет остальные, дожидается их и выбрасывает ошибку после with
🥰 — Выполняет задачи строго последовательно
⚡️ — Требует вручную вызывать cancel() для каждой задачи при ошибке
Библиотека задач по Python
Как корректно задать мутируемый дефолт в dataclass?
👾 — items: list[str] = []
👍 — items: list[str] = field(default_factory=list)
🥰 — items как tuple, а в post_init конвертировать в list
⚡️ — Общая для всех экземпляров переменная класса items = []
Библиотека задач по Python
👾 — items: list[str] = []
👍 — items: list[str] = field(default_factory=list)
🥰 — items как tuple, а в post_init конвертировать в list
⚡️ — Общая для всех экземпляров переменная класса items = []
Библиотека задач по Python
👍1
Зачем использовать contextvars.ContextVar вместо threading.local в async-коде?
👾 — Потому что быстрее при тех же семантиках
👍 — Даёт изоляцию на задачу: значение «течёт» через await внутри Task, но не между задачами/потоками; threading.local изолирует только по потоку и протекает между корутинами
🥰 — Автоматически сериализует состояние между процессами
⚡️ — Разрешает безопасно менять глобальные переменные
Библиотека задач по Python
👾 — Потому что быстрее при тех же семантиках
👍 — Даёт изоляцию на задачу: значение «течёт» через await внутри Task, но не между задачами/потоками; threading.local изолирует только по потоку и протекает между корутинами
🥰 — Автоматически сериализует состояние между процессами
⚡️ — Разрешает безопасно менять глобальные переменные
Библиотека задач по Python
Что делает __slots__ в классе?
👾 — Делает экземпляры неизменяемыми и хешируемыми
👍 — Убирает dict у экземпляров и запрещает произвольные атрибуты, оставляя только перечисленные слоты (меньше памяти)
🥰 — Превращает класс в dataclass
⚡️ — Включает GIL-оптимизации для всех операций
Библиотека задач по Python
👾 — Делает экземпляры неизменяемыми и хешируемыми
👍 — Убирает dict у экземпляров и запрещает произвольные атрибуты, оставляя только перечисленные слоты (меньше памяти)
🥰 — Превращает класс в dataclass
⚡️ — Включает GIL-оптимизации для всех операций
Библиотека задач по Python
Как в Python 3.11+ выполнить блокирующую функцию из async-кода без доступа к loop?
👾 — await func()
👍 — await asyncio.to_thread(func, *args)
🥰 — time.sleep() внутри корутины
⚡️ — await asyncio.sleep(0) перед вызовом
Библиотека задач по Python
👾 — await func()
👍 — await asyncio.to_thread(func, *args)
🥰 — time.sleep() внутри корутины
⚡️ — await asyncio.sleep(0) перед вызовом
Библиотека задач по Python
Как перезагрузить импортированный модуль?
Чтобы перезагрузить импортированный модуль в Python, вы можете использовать функцию reload() из модуля importlib.
Замените module_name на фактическое имя модуля, который вы хотите перезагрузить.
Это может быть полезно при разработке и тестировании модулей, но не рекомендуется использовать в производственном коде без серьезных причин.
Библиотека задач по Python
Чтобы перезагрузить импортированный модуль в Python, вы можете использовать функцию reload() из модуля importlib.
Замените module_name на фактическое имя модуля, который вы хотите перезагрузить.
Это может быть полезно при разработке и тестировании модулей, но не рекомендуется использовать в производственном коде без серьезных причин.
Библиотека задач по Python
Чем отличается copy.copy от copy.deepcopy?
👾 — Обе делают глубокую копию
👍 — copy копирует только контейнер, вложенные объекты — по ссылке; deepcopy рекурсивно копирует всё
🥰 — Обе лишь увеличивают счётчик ссылок
⚡️ — deepcopy быстрее, поэтому всегда лучше
Библиотека задач по Python
👾 — Обе делают глубокую копию
👍 — copy копирует только контейнер, вложенные объекты — по ссылке; deepcopy рекурсивно копирует всё
🥰 — Обе лишь увеличивают счётчик ссылок
⚡️ — deepcopy быстрее, поэтому всегда лучше
Библиотека задач по Python
👍2
👩💻 Асинхронное взаимодействие в Python на примере RabbitMQ
Приглашаем на открытый урок.
🗓 10 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Python Developer. Professional».
Асинхронное взаимодействие — один из ключевых принципов микросервисной архитектуры, который позволяет системам работать быстрее и надёжнее. В Python этот подход реализуется с помощью инструментов, таких как RabbitMQ.
На вебинаре разберём:
✔️ Основы микросервисной архитектуры приложений
✔️ Принципы асинхронного взаимодействия в микросервисной архитектуре
✔️ Практический пример использования RabbitMQ для организации обмена сообщениями между сервисами
В результате вебинара вы:
✔️Поймёте, как работает асинхронное взаимодействие и зачем оно нужно
✔️Научитесь использовать RabbitMQ для построения архитектуры приложений
✔️Узнаете, какие преимущества и ограничения имеет асинхронный подход
🔗 Ссылка на регистрацию: https://clck.ru/3Q5iNP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Приглашаем на открытый урок.
🗓 10 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Python Developer. Professional».
Асинхронное взаимодействие — один из ключевых принципов микросервисной архитектуры, который позволяет системам работать быстрее и надёжнее. В Python этот подход реализуется с помощью инструментов, таких как RabbitMQ.
На вебинаре разберём:
✔️ Основы микросервисной архитектуры приложений
✔️ Принципы асинхронного взаимодействия в микросервисной архитектуре
✔️ Практический пример использования RabbitMQ для организации обмена сообщениями между сервисами
В результате вебинара вы:
✔️Поймёте, как работает асинхронное взаимодействие и зачем оно нужно
✔️Научитесь использовать RabbitMQ для построения архитектуры приложений
✔️Узнаете, какие преимущества и ограничения имеет асинхронный подход
🔗 Ссылка на регистрацию: https://clck.ru/3Q5iNP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что делает yield from subgen?
👾 — Просто вызывает подгенератор и возвращает список
👍 — Делегирует итерацию/send/throw/close подгенератору и получает его return как результат (PEP 380)
🥰 — Запускает подгенератор параллельно в другом потоке
⚡️ — Гарантирует выполнение в отдельном процессе
Библиотека задач по Python
👾 — Просто вызывает подгенератор и возвращает список
👍 — Делегирует итерацию/send/throw/close подгенератору и получает его return как результат (PEP 380)
🥰 — Запускает подгенератор параллельно в другом потоке
⚡️ — Гарантирует выполнение в отдельном процессе
Библиотека задач по Python