🐍 20 реально полезных однострочных функций на Python — для тех, кто пишет в прод
Забудь про
1. 📁 Получить все файлы с расширением
2. 🧪 Быстрое тестирование скорости любого выражения
3. 🔎 Показать все публичные методы объекта
4. 🧼 Очистить DataFrame от строк с NaN
5. 🔄 Быстрое многопоточное выполнение функций
6. 🗜️ Получить частоты значений в списке
7. 🔍 Найти дубликаты в списке
8. 📦 Сжать список без
9. 🕵️♂️ Ловить и логировать все исключения в одном выражении
10. 📊 Преобразовать список словарей в DataFrame
11. 🔄 Инвертировать словарь с проверкой на коллизии
12. ⏳ Простой таймер
13. 🔢 Перемешать и взять подмножество
14. 🧠 Получить максимальный элемент по ключу
15. 📐 Убрать отступ у многострочной строки
16. 🛠️ Простой retry без библиотек
17. 📚 Преобразовать JSON-файл в объект
18. 🧮 Быстрая нормализация NumPy-вектора
19. 🧾 Отобразить все переменные окружения, отсортированные по имени
20. 🔄 Преобразовать словарь в query string
@pythonl
Забудь про
[::-1]
и lambda x: x*2
. Вот подборка, где однострочники реально ускоряют работу, убирают лишний код и улучают читаемость кода:1. 📁 Получить все файлы с расширением
.py
рекурсивно
files = list(Path('.').rglob('*.py'))
2. 🧪 Быстрое тестирование скорости любого выражения
timeit(lambda: your_func(), number=1000)
3. 🔎 Показать все публичные методы объекта
[m for m in dir(obj) if not m.startswith('_')]
4. 🧼 Очистить DataFrame от строк с NaN
df_clean = df.dropna()
5. 🔄 Быстрое многопоточное выполнение функций
list(ThreadPoolExecutor().map(func, iterable))
6. 🗜️ Получить частоты значений в списке
dict(Counter(my_list))
7. 🔍 Найти дубликаты в списке
dups = [x for x, c in Counter(lst).items() if c > 1]
8. 📦 Сжать список без
None
filtered = list(filter(None, data))
9. 🕵️♂️ Ловить и логировать все исключения в одном выражении
try: foo() except Exception as e: logging.exception(e)
10. 📊 Преобразовать список словарей в DataFrame
pd.DataFrame(list_of_dicts)
11. 🔄 Инвертировать словарь с проверкой на коллизии
inv = {v: k for k, v in d.items() if list(d.values()).count(v) == 1}
12. ⏳ Простой таймер
start = time(); result = fn(); print(f'{time() - start:.2f}s')
13. 🔢 Перемешать и взять подмножество
sample = random.sample(big_list, k=100)
14. 🧠 Получить максимальный элемент по ключу
max(data, key=lambda x: x.score)
15. 📐 Убрать отступ у многострочной строки
dedented = textwrap.dedent(multiline_string)
16. 🛠️ Простой retry без библиотек
[func() for _ in range(5) if not success()][-1]
17. 📚 Преобразовать JSON-файл в объект
data = json.loads(Path('file.json').read_text())
18. 🧮 Быстрая нормализация NumPy-вектора
v /= np.linalg.norm(v)
19. 🧾 Отобразить все переменные окружения, отсортированные по имени
print('\n'.join(f'{k}={v}' for k, v in sorted(os.environ.items())))
20. 🔄 Преобразовать словарь в query string
query = urlencode(params)
@pythonl
👍23❤11🔥7
🌟 Odigos — распределенный трейсинг без модификации кода. Этот open-source проект меняет правила игры в observability-инструментах. Инструмент умеет автоматически генерировать распределенные трейсы для приложений на Java, Python, .NET, Node.js и Go без необходимости правки исходного кода.
Под капотом используется eBPF для низкоуровневой инструментации, что особенно ценно для скомпилированных языков вроде Go. Трейсы сразу экспортируются в формате OpenTelemetry, что позволяет интегрироваться с любыми совместимыми системами мониторинга.
🤖 GitHub
@pythonl
Под капотом используется eBPF для низкоуровневой инструментации, что особенно ценно для скомпилированных языков вроде Go. Трейсы сразу экспортируются в формате OpenTelemetry, что позволяет интегрироваться с любыми совместимыми системами мониторинга.
🤖 GitHub
@pythonl
❤5🔥2🤩2
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Подменяй любые импорты в Python “на лету” — без изменения кода
Если ты хочешь протестировать модуль, подменить зависимость, замокать внешний сервис или обмануть импорт — не обязательно редактировать исходники. Python позволяет перехватывать импорты прямо во время выполнения, через
Вот минимальный приём, который делает это прозрачно:
@pythonl
Если ты хочешь протестировать модуль, подменить зависимость, замокать внешний сервис или обмануть импорт — не обязательно редактировать исходники. Python позволяет перехватывать импорты прямо во время выполнения, через
sys.modules
.Вот минимальный приём, который делает это прозрачно:
import sys
import types
# Создаём фейковый модуль
fake = types.SimpleNamespace()
fake.get_data = lambda: "подмена работает"
# Подменяем импорт
sys.modules['external_service'] = fake
# Теперь даже import будет работать
import external_service
print(external_service.get_data()) # → "подмена работает"
@pythonl
❤12🔥5👍2
🐍 Часть2: ещё 20 полезных Python-однострочников для тех, кто пишет в прод
Первая часть зашла — вот ещё 20 трюков, которые реально экономят время и делают код лаконичнее и чище:
1. 📥 Считать все строки из файла, убрав перевод строки
2. 🔐 Получить SHA256-хеш строки
3. 🧮 Конвертация списка чисел в строку
4. 🛑 Быстро остановить выполнение скрипта
5. 🧠 Распечатать размер объекта в памяти
6. 🧬 Плоское разворачивание вложенных списков
7. 🔄 Инвертировать булеву маску NumPy
8. 🧽 Удалить дубликаты из списка, сохранив порядок
9. 📦 Распаковка аргументов из словаря в функцию
10. 🔎 Получить словарь с топ-N частыми значениями
11. 🪓 Ограничить длину строки с троеточием
12. 🎛️ Массив из 0 и 1 случайной длины
13. 🗓️ Получить сегодняшнюю дату в формате ISO
14. 📁 Получить размер файла в мегабайтах
15. 🔀 Перемешать словарь (Python 3.7+ сохраняет порядок)
16. ⏳ Измерить время выполнения блока
17. 🧱 Разделить список на чанки по N
18. 🕵️ Проверить, работает ли хост (без ping)
19. 🛠️ Быстро заменить подстроку без re
20. 🧪 Убедиться, что все элементы списка — числа
📌 Если нужна часть 3 — ставь лайк.
@pythonl
Первая часть зашла — вот ещё 20 трюков, которые реально экономят время и делают код лаконичнее и чище:
1. 📥 Считать все строки из файла, убрав перевод строки
lines = Path('file.txt').read_text().splitlines()
2. 🔐 Получить SHA256-хеш строки
hash = hashlib.sha256(b"your text").hexdigest()
3. 🧮 Конвертация списка чисел в строку
s = ','.join(map(str, numbers))
4. 🛑 Быстро остановить выполнение скрипта
raise SystemExit("Done")
5. 🧠 Распечатать размер объекта в памяти
print(sys.getsizeof(obj))
6. 🧬 Плоское разворачивание вложенных списков
flat = [i for sub in nested for i in sub]
7. 🔄 Инвертировать булеву маску NumPy
inv_mask = ~mask
8. 🧽 Удалить дубликаты из списка, сохранив порядок
seen = set(); uniq = [x for x in lst if not (x in seen or seen.add(x))]
9. 📦 Распаковка аргументов из словаря в функцию
result = func(**params)
10. 🔎 Получить словарь с топ-N частыми значениями
top_n = dict(Counter(lst).most_common(5))
11. 🪓 Ограничить длину строки с троеточием
s_trunc = s[:n] + '…' if len(s) > n else s
12. 🎛️ Массив из 0 и 1 случайной длины
binary = [random.randint(0, 1) for _ in range(n)]
13. 🗓️ Получить сегодняшнюю дату в формате ISO
today = date.today().isoformat()
14. 📁 Получить размер файла в мегабайтах
size_mb = os.path.getsize(path) / 1024**2
15. 🔀 Перемешать словарь (Python 3.7+ сохраняет порядок)
shuffled = dict(random.sample(d.items(), len(d)))
16. ⏳ Измерить время выполнения блока
with contextlib.redirect_stdout(io.StringIO()): exec('code')
17. 🧱 Разделить список на чанки по N
chunks = [lst[i:i+n] for i in range(0, len(lst), n)]
18. 🕵️ Проверить, работает ли хост (без ping)
ok = socket.create_connection((host, port), timeout=2)
19. 🛠️ Быстро заменить подстроку без re
s = s.replace('from', 'to', 1)
20. 🧪 Убедиться, что все элементы списка — числа
is_all_numbers = all(isinstance(x, (int, float)) for x in lst)
📌 Если нужна часть 3 — ставь лайк.
@pythonl
👍73❤9🔥6
Inside ML: индустриальные секреты машинного обучения
Онлайн-магистратура «Искусственный интеллект» от Вышки запускает мини-курс, где разберём, как ML работает в индустрии: от Computer Vision и AutoML до LLM и мультиагентных систем.
Что вас ждёт:
— 5 вебинаров от практиков из Avito, Сбера, Ozon
— Кейсы: как выигрывают Kaggle AutoML Grand Prix, запускают CV-системы и внедряют LLM в бизнес
— Q&A с экспертами: можно спросить о задачах и карьерном треке в ML
Для кого:
— IT-специалистам, которые хотят перейти в ML или усилить свою экспертизу
— Тем, кто хочет понять, что востребовано сейчас на рынке
— Тем, кто планирует сделать шаг в сторону applied ML или сменить специализацию внутри IT
Когда: до 15 июля, 19:00 (по МСК)
🔗 Зарегистрироваться
Онлайн-магистратура «Искусственный интеллект» от Вышки запускает мини-курс, где разберём, как ML работает в индустрии: от Computer Vision и AutoML до LLM и мультиагентных систем.
Что вас ждёт:
— 5 вебинаров от практиков из Avito, Сбера, Ozon
— Кейсы: как выигрывают Kaggle AutoML Grand Prix, запускают CV-системы и внедряют LLM в бизнес
— Q&A с экспертами: можно спросить о задачах и карьерном треке в ML
Для кого:
— IT-специалистам, которые хотят перейти в ML или усилить свою экспертизу
— Тем, кто хочет понять, что востребовано сейчас на рынке
— Тем, кто планирует сделать шаг в сторону applied ML или сменить специализацию внутри IT
Когда: до 15 июля, 19:00 (по МСК)
🔗 Зарегистрироваться
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Совет дня Python: быстро получить частоту элементов в списка
Когда нужно узнать, сколько раз каждый элемент встречается в списке — не пиши вручную циклы. Используй
📌 Удобно для:
— подсчёта слов
— анализа логов
— быстрой статистики по спискам
@pythonl
Когда нужно узнать, сколько раз каждый элемент встречается в списке — не пиши вручную циклы. Используй
collections.Counter
:
from collections import Counter
items = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
freq = Counter(items)
print(freq)
# 👉 Counter({'apple': 3, 'banana': 2, 'orange': 1})
📌 Удобно для:
— подсчёта слов
— анализа логов
— быстрой статистики по спискам
@pythonl
❤17👍5🔥4
Что общего у Netflix, Google и Spotify
Все эти компании используют Python для разработки своих продуктов. Python подходит для создания веб-приложений, анализа данных и даже машинного обучения.
Познакомиться с этим универсальным языком можно на бесплатном курсе Нетологии. За 5 занятий вы не просто изучите теорию, а создадите 2 рабочих проекта.
Сначала напишете планировщик задач. Начнёте с кода, который запрашивает дату и описание задачи, добавите условные операторы и циклы, встроите в программу уникальную функцию с помощью готовых библиотек. После создадите телеграм-бота и перенесёте в него функционал планировщика — на выходе у вас будет полноценное приложение.
Помощь в практике и ответы на вопросы сможете получить в чате с экспертами и однокурсниками.
Записывайтесь
Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5xHtdRi
Все эти компании используют Python для разработки своих продуктов. Python подходит для создания веб-приложений, анализа данных и даже машинного обучения.
Познакомиться с этим универсальным языком можно на бесплатном курсе Нетологии. За 5 занятий вы не просто изучите теорию, а создадите 2 рабочих проекта.
Сначала напишете планировщик задач. Начнёте с кода, который запрашивает дату и описание задачи, добавите условные операторы и циклы, встроите в программу уникальную функцию с помощью готовых библиотек. После создадите телеграм-бота и перенесёте в него функционал планировщика — на выходе у вас будет полноценное приложение.
Помощь в практике и ответы на вопросы сможете получить в чате с экспертами и однокурсниками.
Записывайтесь
Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5xHtdRi
❤4😱2
🚀 Быстрый HTTP‑сервер на базе asyncio.Protocol
В этом гайде показано как создать минималистичный HTTP‑сервер на Python, используя низкоуровневый API
Основные пункты:
1. Сокет-обработчик (`ConnectionHandler`)
- Наследуется от
- Хранит буфер, транспорт и маппинг маршрутов.
2. Парсинг HTTP-запросов
- В
- Запрос считается полным при обнаружении
- Затем из заголовков извлекаются
3. Маршрутизация через декоратор
- Класс
- Обработчик вызывает либо корутины, либо возвращает статический HTML.
4. Отправка ответа
- Используется
- После
5. Простой запуск сервера
- Через
-
6. Высокая производительность
Сервер обрабатывает ~100 000 запросов за ~4.2 с при нагрузке 100 одновременных соединений, в то время как FastAPI справляется за ~32 с :contentReference[oaicite:1]{index=1}.
Зачем это полезно:
- Полный контроль над TCP-соединениями и буферами.
- Существенно выше скорость при простых HTTP-API.
- Отличная демонстрация возможностей, которые остаются скрытыми за высокоуровневыми фреймворками.
Поддержка сообщества:
На Reddit статья получила высокую оценку как "отличный материал по Asyncio Protocols"
https://jacobpadilla.com/articles/asyncio-protocols
@pythonl
В этом гайде показано как создать минималистичный HTTP‑сервер на Python, используя низкоуровневый API
asyncio.Protocol
, что делает его быстрее и гибче, чем решения на основе asyncio.Streams
или фреймворков типа FastAPI.Основные пункты:
1. Сокет-обработчик (`ConnectionHandler`)
- Наследуется от
asyncio.Protocol
— реакции на события connection_made
, data_received
, connection_lost
. - Хранит буфер, транспорт и маппинг маршрутов.
2. Парсинг HTTP-запросов
- В
data_received
накапливаются байты. - Запрос считается полным при обнаружении
\r\n\r\n
. - Затем из заголовков извлекаются
method
, path
, другие поля.3. Маршрутизация через декоратор
- Класс
HTTPServer
собирает функции-обработчики для путей. - Обработчик вызывает либо корутины, либо возвращает статический HTML.
4. Отправка ответа
- Используется
asyncio.create_task
внутри колбэка, чтобы запустить send_response
— где формируется ответ с HTTP-кодом, заголовками и телом. - После
write()
соединение закрывается.5. Простой запуск сервера
- Через
loop.create_server()
создаётся экземпляр ConnectionHandler
. -
serve_forever()
запускает обработку соединений.6. Высокая производительность
Сервер обрабатывает ~100 000 запросов за ~4.2 с при нагрузке 100 одновременных соединений, в то время как FastAPI справляется за ~32 с :contentReference[oaicite:1]{index=1}.
Зачем это полезно:
- Полный контроль над TCP-соединениями и буферами.
- Существенно выше скорость при простых HTTP-API.
- Отличная демонстрация возможностей, которые остаются скрытыми за высокоуровневыми фреймворками.
Поддержка сообщества:
На Reddit статья получила высокую оценку как "отличный материал по Asyncio Protocols"
https://jacobpadilla.com/articles/asyncio-protocols
@pythonl
❤13👍3🤩1
🐍 20 ещё более продвинутых однострочников на Python — часть 3
Если ты уже пишешь на Python профессионально, вот ещё приёмы, которые реально экономят строки и читаются на лету:
1. 🗃️ Группировка по ключу без pandas
2. 🪄 Быстрое глубокое копирование объекта
3. 📤 Отправка JSON через POST
4. 📌 Проверка, что файл — это символическая ссылка
5. 🧩 Быстрое объединение нескольких словарей
6. 🧪 Проверить, что список отсортирован
7. 🔍 Найти все подстроки по регулярке
8. 🌐 Извлечь домен из URL
9. 🧬 Преобразовать список строк в int
10. 📚 Считать CSV в список словарей
11. 🔄 Превратить int в побитовую строку
12. 📤 Сохранить объект в JSON-файл
13. 🧮 Убрать пустые строки из списка
14. 🧾 Распарсить query string в словарь
15. 🧰 Получить уникальные строки, сохранив порядок
16. 📈 Получить индекс максимального значения
17. 🪛 Проверить, что список вложенный (2D)
18. 🧱 Убрать все символы кроме букв и цифр
19. ⌛ Ограничить время выполнения кода
20. 📦 Получить структуру всех полей dataclass
📌 Часть 1
📌 Часть 2
@pythonl
Если ты уже пишешь на Python профессионально, вот ещё приёмы, которые реально экономят строки и читаются на лету:
1. 🗃️ Группировка по ключу без pandas
groups = defaultdict(list); [groups[k].append(v) for k, v in data]
2. 🪄 Быстрое глубокое копирование объекта
copy = pickle.loads(pickle.dumps(obj, -1))
3. 📤 Отправка JSON через POST
r = requests.post(url, json=payload)
4. 📌 Проверка, что файл — это символическая ссылка
is_symlink = Path(p).is_symlink()
5. 🧩 Быстрое объединение нескольких словарей
merged = {**d1, **d2, **d3}
6. 🧪 Проверить, что список отсортирован
is_sorted = all(a <= b for a, b in zip(lst, lst[1:]))
7. 🔍 Найти все подстроки по регулярке
matches = re.findall(r'\d+', text)
8. 🌐 Извлечь домен из URL
domain = urlparse(url).netloc
9. 🧬 Преобразовать список строк в int
nums = list(map(int, str_list))
10. 📚 Считать CSV в список словарей
rows = list(csv.DictReader(open('file.csv')))
11. 🔄 Превратить int в побитовую строку
bits = f'{num:08b}'
12. 📤 Сохранить объект в JSON-файл
json.dump(obj, open('data.json', 'w'), indent=2)
13. 🧮 Убрать пустые строки из списка
lines = [l for l in lines if l.strip()]
14. 🧾 Распарсить query string в словарь
params = dict(parse_qsl('a=1&b=2'))
15. 🧰 Получить уникальные строки, сохранив порядок
seen = set(); uniq = [s for s in seq if not (s in seen or seen.add(s))]
16. 📈 Получить индекс максимального значения
idx = max(range(len(lst)), key=lst.__getitem__)
17. 🪛 Проверить, что список вложенный (2D)
is_nested = all(isinstance(i, list) for i in lst)
18. 🧱 Убрать все символы кроме букв и цифр
clean = re.sub(r'\W+', '', text)
19. ⌛ Ограничить время выполнения кода
signal.alarm(2); try: ... except: ...
20. 📦 Получить структуру всех полей dataclass
fields = [f.name for f in dataclasses.fields(MyClass)]
📌 Часть 1
📌 Часть 2
@pythonl
👍12❤9🔥5🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
🐍 Продвинутый Python‑совет дня
💡 Используй слоты (`__slots__`) для оптимизации классов, когда тебе нужно много однотипных объектов.
По умолчанию Python хранит атрибуты объектов в словаре (`__dict__`), что удобно, но неэффективно по памяти. Если ты точно знаешь, какие поля будут у объекта — зафиксируй их:
📈 Выгода:
- Уменьшает использование памяти до 30–50% для миллионов объектов
- Ускоряет доступ к полям (нет __dict__)
- Запрещает создание произвольных новых атрибутов (меньше багов)
🧠 Подходит:
- Для численных расчётов (вместо namedtuple)
- При генерации большого количества однотипных объектов
- В data-heavy структурах (например, парсеры, AST, графы и т.п.)
Python — динамичный язык, но когда знаешь структуру данных заранее, slots дают тебе контроль и производительность.
👉 Видео
💡 Используй слоты (`__slots__`) для оптимизации классов, когда тебе нужно много однотипных объектов.
По умолчанию Python хранит атрибуты объектов в словаре (`__dict__`), что удобно, но неэффективно по памяти. Если ты точно знаешь, какие поля будут у объекта — зафиксируй их:
class Point:
slots = ("x", "y") # только эти атрибуты допустимы
def __init__(self, x, y):
self.x = x
self.y = y```
📈 Выгода:
- Уменьшает использование памяти до 30–50% для миллионов объектов
- Ускоряет доступ к полям (нет __dict__)
- Запрещает создание произвольных новых атрибутов (меньше багов)
🧠 Подходит:
- Для численных расчётов (вместо namedtuple)
- При генерации большого количества однотипных объектов
- В data-heavy структурах (например, парсеры, AST, графы и т.п.)
Python — динамичный язык, но когда знаешь структуру данных заранее, slots дают тебе контроль и производительность.
👉 Видео
❤14🔥4👍3
Если вам нужно открыть *N* файлов, захватить *M* блокировок или временно изменить кучу настроек, а их количество известно только во время выполнения, традиционный
with … as …:
не подойдёт. Вместо «пирамиды» вложенных with
воспользуйтесь ExitStack:
from contextlib import ExitStack
filenames = ["a.log", "b.log", "c.log"]
with ExitStack() as stack:
files = [stack.enter_context(open(name)) for name in filenames]
# теперь у вас список открытых файлов, с которыми можно работать
for f in files:
print(f.readline())
# здесь ExitStack автоматически закроет все файлы, даже если их было 1000
Почему это круто
- Управляет произвольным числом контекстов: добавляете их в цикл, условно, через функции-фабрики.
- Гарантирует корректный rollback при исключениях: всё, что добавлено в ExitStack, будет закрыто в обратном порядке.
- Упрощает сложную инициализацию: можно динамически «подключать» то, что нужно именно сейчас (файлы, блокировки, сетевые соединения).
🔧 Где пригодится
- Пакетная обработка файлов и архивов.
- Тестовые стенды с кучей временных ресурсов.
- Плагины, которые могут регистрировать собственные контекст-менеджеры.
Теперь никакого «каскада из with» — один аккуратный ExitStack.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥9❤6