Python вопросы с собеседований
25.3K subscribers
547 photos
27 videos
17 files
438 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🐍 Snoop — умный дебаггер для Python, который делает отладку проще print-ов. Проект предлагает альтернативу классическому print() для отладки: просто добавьте декоратор @snoop к функции, и он покажет пошаговое выполнение кода с значениями переменных.

Интегрируется с Jupyter, поддерживает глубину вложенных вызовов (depth=2) и даже умеет взрывать сложные структуры данных (watch_explode). Не требует сложной настройки — достаточно pip install snoop.

🤖 GitHub

@python_job_interview
13👍7🔥2
🖥 Полезный трюк: Полезный трюк: временно фиксируйте генераторы случайных чисел в блоке кода и автоматически возвращайте их состояние.

Это даёт воспроизводимость экспериментов без глобальных побочек. С


from contextlib import contextmanager

@contextmanager
def temp_seed(seed: int):
# Сохраняем состояния
py_state = random.getstate()
try:
import numpy as np
np_state = np.random.get_state()
except Exception:
np = None
np_state = None
try:
import torch
torch_state = torch.random.get_rng_state()
torch_cuda_state = torch.cuda.get_rng_state_all() if torch.cuda.is_available() else None
except Exception:
torch = None
torch_state = torch_cuda_state = None

# Устанавливаем семена
random.seed(seed)
if np: np.random.seed(seed)
if torch:
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
try:
yield
finally:
# Восстанавливаем состояния
random.setstate(py_state)
if np_state is not None: np.random.set_state(np_state)
if torch_state is not None: torch.random.set_rng_state(torch_state)
if torch_cuda_state is not None and torch.cuda.is_available():
torch.cuda.set_rng_state_all(torch_cuda_state)

# Пример использования
if __name__ == "__main__":
import numpy as np

with temp_seed(123):
print("Блок A:", random.random(), np.random.randint(0, 10))
with temp_seed(123):
print("Блок B:", random.random(), np.random.randint(0, 10)) # те же значения
print("Вне блока:", random.random()) # обычный глобальный поток случайности
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 НЕОЧЕВИДНЫЙ ТРЮК: ускоряй циклы в Python без лишнего кода с помощью itemgetter

Если ты часто итерируешь по списку словарей и достаёшь одни и те же поля — ты можешь заметно ускорить код, заменив lambda на operator.itemgetter. Это не только делает код чище, но и работает быстрее за счёт оптимизации на уровне C.

Полезно, например, при сортировке, группировке или фильтрации данных.

https://www.youtube.com/shorts/55V7jgTrcBA
👍65🔥1
🐍 Полезный совет по Python: используйте with open() вместо ручного закрытия файлов

Начинающие часто пишут так:


f = open("data.txt", "r")
data = f.read()
f.close()


Код рабочий, но если внутри произойдёт ошибка — файл может не закрыться. Это приведёт к утечкам ресурсов.

🚀 Правильный способ — использовать контекстный менеджер with open()


with open("data.txt", "r") as f:
data = f.read()



💡 Преимущества:

Файл закрывается автоматически, даже если произойдёт ошибка

Код становится короче и чище

Работает одинаково для чтения, записи и бинарных файлов

📊 Пример записи:

with open("output.txt", "w") as f:
f.write("Hello, Python!")


После выхода из блока with файл гарантированно закрыт, ничего вручную делать не нужно.

📌 Итог
Используйте with open() всегда, когда работаете с файлами. Это безопаснее, чище и надёжнее, чем open() + close().
👍14🔥42😁2🤩1
Тот, кто знает, чего хотят на собеседовании, всегда выигрывает у того, кто просто пришел отвечать на вопросы.

Разница между ними в том, что первый видит процесс целиком: он понимает, зачем нужен каждый этап, чего ждет интервьюер, и как в нужный момент показать сильные стороны. А второй просто надеется, что его ответы «понравятся». И, к сожалению, чаще всего это не срабатывает.

21 августа в 18:00 (МСК) karpovꓸcourses проведут вебинар совместно с Павлом Бухтиком — экс-руководителем продуктовой аналитики в Яндексе и FindMyKids, экспертом с восьмилетним опытом в профессии, пять из которых на управленческой позиции.

Вам покажут, как выглядит воронка собеседований, что происходит на каждом шаге, и как реагировать на задачи так, чтобы интервьюер видел, что перед ним человек, который точно справится с работой.

Узнайте четкий план, как действовать на собеседовании: https://clc.to/erid_2W5zFJd2cvC 

Это третий вебинар Data-интенсива: от новичка до оффера, который поможет сориентироваться в сфере Data Science и перейти к первым шагам.

Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFJd2cvC
3
This media is not supported in your browser
VIEW IN TELEGRAM
Python-трюк: быстрая группировка данных

Хотите сгруппировать элементы по ключу без лишних циклов?
Используйте itertools.groupby — но не забудьте предварительно отсортировать данные по этому ключу, иначе группы будут неправильными.


from itertools import groupby
from operator import itemgetter

data = [
{"user": "alice", "score": 8},
{"user": "bob", "score": 5},
{"user": "alice", "score": 7},
{"user": "bob", "score": 9},
]

# Сортируем по ключу
data.sort(key=itemgetter("user"))

# Группируем и считаем средний балл
for user, items in groupby(data, key=itemgetter("user")):
scores = [i["score"] for i in items]
print(user, "avg score:", sum(scores) / len(scores))



#Python #itertools #groupby #lifehack
👍86🔥3
⚡️Лето подходит к концу, но подарки нет!

Разыгрываем iPhone 16 Pro и Apple Watch SE 2 📲⌚️

📄 Условия участия очень просты:

⚡️
Подписаться на Telegram каналы:

t.iss.one/pythonl

t.iss.one/DevOPSitsec

⚡️Нажать "Участвую!" под этим постом

Итоги подведём уже 15 сентября. Доставка осуществляется по всей территории РФ и РБ🚚

⚡️Удачи ВСЕМ🍀
4👍4🔥3🍾1
👾 Задача из собеседования по Python
Уровень: middle-senior

Условие:
Реализуйте потокобезопасный кэш с TTL и политикой вытеснения LRU. Кэш должен:
1️⃣ Автоматически удалять записи по истечении TTL.
2️⃣ При достижении максимального размера вытеснять реже всего используемые элементы.
3️⃣ Гарантировать корректную работу в многопоточной среде.
4️⃣ Поддерживать методы: get(key), set(key, value, ttl), delete(key), clear().
5️⃣ Опционально: реализовать ленивое удаление просроченных записей.

Решение:

import time
import threading
from collections import OrderedDict

class TTLLRUCache:
def __init__(self, maxsize=1024):
self.maxsize = maxsize
self._cache = OrderedDict()
self._lock = threading.RLock()
self._expiry_times = {}

def get(self, key):
with self._lock:
if key not in self._cache:
return None

# Ленивое удаление просроченного ключа
if self._is_expired(key):
self._delete(key)
return None

# Обновляем порядок использования (LRU)
self._cache.move_to_end(key)
return self._cache[key]

def set(self, key, value, ttl=None):
with self._lock:
# Вытеснение старых записей при достижении лимита
if len(self._cache) >= self.maxsize:
self._evict()

self._cache[key] = value
self._cache.move_to_end(key)
self._expiry_times[key] = time.time() + ttl if ttl else None

def delete(self, key):
with self._lock:
self._delete(key)

def _delete(self, key):
self._cache.pop(key, None)
self._expiry_times.pop(key, None)

def clear(self):
with self._lock:
self._cache.clear()
self._expiry_times.clear()

def _is_expired(self, key):
expiry = self._expiry_times.get(key)
return expiry is not None and expiry < time.time()

def _evict(self):
# Сначала удаляем просроченные ключи
expired_keys = [k for k in self._cache if self._is_expired(k)]
for k in expired_keys:
self._delete(k)

# Если после этого кэш всё ещё полон, применяем LRU
if len(self._cache) >= self.maxsize:
self._cache.popitem(last=False)

def __contains__(self, key):
with self._lock:
if key not in self._cache:
return False
if self._is_expired(key):
self._delete(key)
return False
return True


Пояснение:

1. Потокобезопасность:
Используется threading.RLock для всех операций, изменяющих состояние кэша. Это позволяет рекурсивные блокировки из одного потока.

2. TTL:
Время истечения хранится в отдельном словаре _expiry_times. При обращении к ключу проверяется его актуальность.

3. LRU-политика:
OrderedDict автоматически поддерживает порядок использования элементов. Метод move_to_end() обновляет позицию при каждом обращении, а popitem(last=False) удаляет самый старый элемент.

4. Гибкое удаление:
— Ленивое (при обращении к ключу)
— Активное (при добавлении новых элементов через _evict())

5. Оптимизация:
— Сначала удаляются просроченные ключи, и только потом применяется LRU.
— Сложность операций: O(1) для get/set (в среднем случае).

@python_job_interview
🖕95🔥4🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🆕 Hugging Face представили **AI Sheets** — no-code инструмент для создания и обработки таблиц с помощью ИИ.

- Выглядит как обычная таблица, но вместо формул — тысячи моделей
- Поддержка OpenAI-совместимых и локальных LLM
- Можно добавлять столбцы с промптами, редактировать данные вручную или через лайки
- Запуск онлайн или локально (Docker / pnpm)
- Полностью опенсорс (Apache-2.0), легко встроить в пайплайны
- Подходит для классификации, трансформации данных, синтетики и «vibe-тестов» моделей

⚡️ Попробовать

#AI #NoCode #datasets #HuggingFace #LLM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👍3
🖥 Полный проект с нуля: клон голоса на Python

🔊 Клонирование голоса на Python с нуля: пошаговый разбор, рабочий код, проверка сходства и защита с водяными знаками.

Полное руководство для разработчиков по созданию собственного проекта voice cloning.

📌 Читать

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5👍2
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Молниеносный HTML-парсинг: selectolax быстрее BS4 в разы

Полезный трюк: быстро парсим HTML прямо из строки с помощью selectolax — лёгкой и очень быстрой библиотеки на C, в разы быстрее BeautifulSoup.

Установка:

pip install selectolax

Пример с кодом:


from selectolax.parser import HTMLParser

html = """

<html><body> <h1>Hello</h1> <p class='msg'>World</p> </body></html> """
tree = HTMLParser(html)
print(tree.css_first("h1").text()) # Hello
print(tree.css_first("p.msg").text()) # World



https://www.youtube.com/shorts/CSYJDmt4ztg
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2🔥1
Forwarded from Machinelearning
📌Python на взлете, а Python Software Foundation в минусе на 1.5 млн. долларов: разбираем свежий опрос.

Python Software Foundation (PSF) совместно с JetBrains опубликовала результаты восьмого, самого крупного в истории опроса разработчиков - в нём приняли участие более 30 000 человек.

Данные, собранные в конце 2024 года, показывают, что 72% респондентов используют Python в рабочих целях и это подтверждает доминирующую роль языка в индустрии. И популярность Python продолжает расти: согласно другому исследованию, от Stack Overflow, использование языка увеличилось на 7%.

🟡Приток свежей крови в экосистему.

Половина опрошенных имеют менее 2 лет профессионального опыта в программировании, а 39% начали использовать Python в течение последних 2 лет. Это говорит о том, что язык активно привлекает новичков и остается ключевой точкой входа в разработку.

🟡Парадокс версий.

Только 15% разработчиков используют последнюю на момент опроса версию, 3.13. В PSF утверждают, что массовый переход на нее мог бы сэкономить миллионы долларов на облачных вычислениях за счет повышения эффективности.

Однако сами разработчики не торопятся: 53% заявляют, что текущая версия полностью удовлетворяет их потребности, 27% ссылаются на проблемы с совместимостью, а 25% - на нехватку времени.

При этом нельзя сказать, что сообщество инертно. Самая популярная версия - 3.12 (35%), выпущенная в конце 2023 года, за ней следует 3.11 (21%), что говорит о довольно быстрой адаптации к не самым последним, но свежим релизам.

🟡Сферы применения.

Анализ данных (48%) и веб-разработка (46%) идут практически вровень. Но если к анализу прибавить ML (41%) и инжиниринг данных (31%), то доминирование Data Science становится очевидным.

В мире веб-фреймворков происходит смена караула: FastAPI (38%) резко вырвался вперед, обогнав ветеранов: Django (35%) и Flask (34%). Год назад у FastAPI было всего 29%.

Ещё один стремительный взлёт — у написанного на Rust менеджера пакетов uv, который позиционируется как замена pip. Заявляя о кратном превосходстве в скорости, он уже отхватил 11% пользователей.

А вот в лагере IDE плохие новости для спонсора опроса, JetBrains: Visual Studio Code укрепил свое лидерство, набрав 48% (против 41% в прошлом году), а доля PyCharm снизилась до 25% (с 31%).

🟡Финансовые проблемы Python Software Foundation.

Ранее в этом месяце PSF объявила о приостановке своей грантовой программы из-за нехватки средств.

Годовой отчет за 2024 год показал чистый убыток в размере 1 462 000 долларов, что значительно больше, чем в 2023 году, там убыток был 225 000 долларов.

Фонд, который поддерживает репозиторий PyPI, дистрибуцию самого Python и нанимает разработчиков для CPython, оказался в сложной ситуации и явно нуждается в большей поддержке и ресурсах от корпораций, которые строят свой бизнес и получают доход на Python.


@ai_machinelearning_big_data

#news #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥2
🏵️ async-lru — кэширование для асинхронного Python без головной боли

Простой, но мощный порт стандартного lru_cache из functools для asyncio-приложений. Главная фишка — автоматическая обработка конкурентных вызовов: даже если 10 корутин запросят одни и те же данные одновременно, реальный запрос выполнится лишь один раз.

Проект особенно полезен в связке с aiohttp для кэширования HTTP-запросов или результатов работы с базами данных. Поддержка TTL и ручная инвалидация кэша делают библиотеку универсальным инструментом.

🤖 GitHub

@python_job_interview
2👍1