PytStart | Программирование на Python
Открыть в Telegram
Python: примеры кода, уроки, статьи Купить рекламу: https://telega.in/c/pytstart ✍️По всем вопросам: @Pascal4eg
Больше4 256
Подписчики
-224 часа
-167 дней
-6130 день
Архив постов
🖥 Как сделать генератор случайных паролей на Python
Небольшой скрипт, который создаёт случайный пароль заданной длины 🔐
import secrets
import string
chars = string.ascii_letters + string.digits + "!@#$%^&*"
password = "".join(
secrets.choice(chars)
for _ in range(16)
)
print(password)
💡 Почему secrets, а не обычный random?
secrets предназначен именно для случаев, где важна непредсказуемость случайных значений.
📌 Можно менять длину:
length = 24
password = "".join(
secrets.choice(chars)
for _ in range(length)
)
🔥 На основе этого можно сделать:
— генератор паролей
— CLI-утилиту
— генератор токенов
— автоматическое создание временных ключей«Освоение модульного тестирования с использованием Pytest» курс на Stepik
Сегодня умение писать тесты ценится почти так же, как и умение писать сам код. Если pytest, fixtures, CI/CD и coverage всё ещё вызывают вопросы самое время это исправить
Программа курса:
• Pytest: от базовых тестов до CI/CD
• fixtures, mocking, parametrization
• Flask/API testing
• Selenium и UI тестирование
• Docker + Docker Compose
• GitHub Actions
• coverage и отчёты
• debugging и refactoring тестов
Курс построен вокруг практики: много примеров, готовых кейсов и разборов рабочих сценариев
48 часов действует скидка 25%
↗️ Пройти курс на Stepik
🖥 Как найти дубликаты в папке с помощью Python
Например, в папке лежат сотни файлов, и нужно понять, какие из них полностью одинаковые.
Можно сравнивать их по хэшу 👇
from pathlib import Path
import hashlib
def get_hash(path):
return hashlib.md5(path.read_bytes()).hexdigest()
files = {}
for file in Path("files").iterdir():
if file.is_file():
file_hash = get_hash(file)
files.setdefault(file_hash, []).append(file)
for group in files.values():
if len(group) > 1:
print("Дубликаты:")
for file in group:
print(" ", file)
💡 Идея простая:
📄 файл → 🔢 хэш → 🔍 сравниваем хэши
Если хэши совпали, файлы с высокой вероятностью одинаковые.
🔥 Такой скрипт можно использовать для:
— очистки папок
— поиска повторяющихся фото
— анализа больших архивов
— автоматизации работы с файламиВайбкодим «Полный путь разработки AI-агентов: от MCP до Agentic RAG»
Образовательная программа на Stepik по разработке современных AI-агентов.
Начинаем с Model Context Protocol: создаём MCP-серверы, подключаем инструменты и внешние API, а затем переходим к разработке Agentic RAG-систем с памятью, рассуждением, поиском знаний и оценкой качества.
• Model Context Protocol и MCP-серверы
• LangChain, LangGraph, LlamaIndex
• API, инструменты, ресурсы и промпты
• Классический RAG → Agentic RAG
• ReAct, память и планирование
• Графы знаний и свои инструменты
• Трассировка и подготовка к production
Успей, скидка 20% действует 48 часов
↗️ Начать обучение на Stepik
🖥 Как превратить PDF в текст с помощью Python
Нужно быстро достать текст из PDF? Можно автоматизировать это 👇
import fitz
doc = fitz.open("document.pdf")
for page in doc:
print(page.get_text())
📦 Установка:
pip install pymupdf
💡 А если нужно сохранить весь текст в файл:
with open("result.txt", "w", encoding="utf-8") as file:
for page in doc:
file.write(page.get_text())
🔥 Получается простой конвертер PDF → TXT.
На этом можно построить:
— поиск по документам
— обработку большого количества PDF
— извлечение данных из отчётов
— подготовку текста для AI
⚠️ Если PDF состоит из сканов, обычное извлечение текста может не сработать - тогда понадобится OCR.Самое интересное в российском PostgreSQL этой осенью!
Регистрируйтесь на бесплатную конференцию по PostgreSQL и технологиям СУБД — Tantor JAM 2026. 10 сентября, Москва. 📅
Что будет на конференции:
✅ AI-first мониторинг СУБД: что уже сегодня можно передать ИИ-агентам и как меняется профессия DBA;
✅ аналитика и HTAP без внешней обвязки, внутри Postgres;
✅ как за два года изменился PostgreSQL для 1С;
✅ защита данных в Tantor Postgres.
Как всегда — технические доклады, живое общение с разработчиками и архитекторами, обмен опытом, а еще — вечерняя программа в честь пятилетия «Тантор Лабс».
Участие бесплатное.
10.09.2026, Москва
Зарегистрироваться
#реклама 16+
tantorlabs.ru
О рекламодателе
🖥 Как превратить текст в речь с помощью Python
Можно заставить Python буквально говорить 🔊
Для этого есть библиотека
pyttsx3:
import pyttsx3
engine = pyttsx3.init()
engine.say("Привет! Я говорю с помощью Python")
engine.runAndWait()
📦 Установка:
pip install pyttsx3
💡 Можно сделать функцию:
def speak(text):
engine.say(text)
engine.runAndWait()
speak("Сегодня изучаем Python!")
🔥 На этой основе можно сделать:
— голосового помощника
— программу для чтения текста
— озвучку уведомлений
— простого desktop-бота
И всё это — без сложных моделей и API 🚀Бесплатный курс по нейросетям для контента от Skillbox
За 3 дня покажем, как создавать тексты, визуалы и видео с нейросетями — даже если вы начинаете с нуля.
✅Опыт в IT не требуется
✅Контент для любой ниши
✅Секреты реалистичного ИИ-контента
Поработаете с NanoBanana, Kling, Leonardo AI, ChatGPT, Claude и Seedance.
Научитесь делать ИИ-контент реалистичным и получать от нейросетей нужный результат.
Курс бесплатный — 0 ₽. Переходите по кнопке «Подробнее».
Узнать больше
#реклама 16+
bootcamp.skillbox.ru
О рекламодателе
🖥 Как повторить строку несколько раз
В Python для этого не нужен цикл 👇
text = "Python! "
print(text * 3)
👉 Результат:
Python! Python! Python!
💡 То же самое работает со списками:
nums = [1, 2]
print(nums * 3)
Получим:
[1, 2, 1, 2, 1, 2]
🔥 Это удобно, когда нужно быстро создать повторяющуюся строку или последовательность.
⚠️ Но со списками есть нюанс: элементы не копируются глубоко - для вложенных изменяемых объектов это может привести к неожиданному поведению.На бесплатном вебинаре «Стабилизация Python-автотестов: причины и инструменты» разберем, как корректно локализовать источник флаппи-тестов: ошибка лежит в логике теста, в нестабильности окружения или это проблема самого продукта.
Основные блоки:
☑️Диагностика. Как отличить flaky-тест от гейзен-бага и почему стандартный подход «перезапустить еще раз» часто делает только хуже.
☑️Инструментарий стабилизации. Покажем на практике, когда действительно помогает pytest-retry, а когда стоит применить pytest-flakefinder для оценки «здоровья» тестового набора.
☑️Стратегия ожиданий. Разберем, почему фиксированные time.sleep() — антипаттерн, и как внедрить экспоненциальные ожидания с помощью tenacity, не усложняя код.
📆Когда: 28 августа в 17:00 (Мск)
️👩🎓Спикер: Алиса Гусева — специалист в области автоматизированного тестирования
👉Записаться👈
#реклама
О рекламодателе
👩💻 Как работает
collections.Counter?
Counter — это удобный инструмент для подсчета элементов в коллекции.
Не обязательно писать цикл и вручную считать каждый элемент 👇
➡️ Пример:
from collections import Counter
data = "aabbbcccc"
counter = Counter(data)
print(counter) # Counter({'c': 4, 'b': 3, 'a': 2})
✔️ Можно использовать для нахождения самых частых элементов:
print(counter.most_common(2)) # [('c', 4), ('b', 3)]
⚙️ Также работает со списками:
words = ["apple", "banana", "apple", "orange", "banana", "banana"]
print(Counter(words)) # {'banana': 3, 'apple': 2, 'orange': 1}
🔥 Counter особенно полезен для:
— анализа текста
— подсчёта слов
— статистики
— обработки данныхРешайте задачи и готовьтесь к техсекции на стажировку
А ты сможешь решить алгоритмическую задачу за час и без подсказок?
Яндекс проводит бесплатные тренировки по алгоритмам для тех, кто хочет систематизировать знания, прокачать решение задач и подготовиться к техническому собеседованию.
-Короткие видеоуроки
-Практические задачи
-Регулярные соревнования
-Решение задач на время
-Рейтинг и награды
-Возможность получить сертификат
Мы тренируем не только знание алгоритмов, но и умение применять их тогда, когда рядом нет подсказок.
Проверь свои алгоритмические навыки и прокачай слабые места.
Регистрируйся на бесплатные тренировки!
Записаться онлайн
#реклама 16+
yandex.ru
О рекламодателе
👩💻 *args и **kwargs: гибкие параметры без боли
Иногда ты не знаешь заранее, сколько аргументов получит твоя функция. Python даёт тебе две магические конструкции для таких случаев —
*args и **kwargs.
📌*args собирает все позиционные аргументы в кортеж:
def add_all(*args):
return sum(args)
add_all(1, 2, 3) # ➡️ 6
📌 **kwargs собирает все именованные аргументы в словарь:
def print_config(**kwargs):
for k, v in kwargs.items():
print(f"{k} = {v}")
print_config(debug=True, timeout=10)
# ➡️ debug = True
# ➡️ timeout = 10
🔥Комбинируем всё:
def func(a, b, *args, **kwargs):
pass
➡️ a и b — обязательные, args — остальные позиционные, kwargs — именованные.
🧠 Применения:
1. Проксирование аргументов
Ты вызываешь другую функцию, не зная её сигнатуру:
def wrapper(*args, **kwargs):
return real_func(*args, **kwargs)
2. Гибкий API без переписывания сигнатур
Вместо:
def create_user(name, email, age, is_admin=False):
...
Можно:
def create_user(**kwargs):
...
3. Расширение без поломки интерфейса
У тебя есть базовый метод:
def process(data, **kwargs):
...
➡️ В будущем можно спокойно добавить флаги, не меняя вызовы.
🗣️ Запомни: *args и **kwargs — это про гибкость и масштабируемость. Главное — использовать их осознанно: когда действительно нужно, а не “на всякий случай”.
📍Где применяется:
Декораторы, middleware, логгеры, фреймворки (Django, Flask), адаптеры, кастомные API, генераторы CLI-интерфейсов.Хочешь попасть в Яндекс или прокачать ML?
Data Dojo — это не лекции, а разбор реальных задач из ML-соревнований и общение с экспертами Яндекса.
Здесь ты прокачаешь навыки, найдёшь команду и выйдешь на новый уровень — как настоящий data-самурай. Нетворкинг, карьерные инсайты и задачи, которые решают топы — всё в одном месте.
Встреча ML-комьюнити Data Dojo:
— общение с руководителями команд
— реальные кейсы из ML
— новые карьерные возможности
Это не просто встреча — это шанс выйти на следующий уровень, прокачаться в ML и получить карьерную консультацию от экспертов Яндекса.
Подай заявку бесплатно и начни свой путь data-самурая уже 9 сентября!
Записаться онлайн
#реклама 16+
yandex.ru
О рекламодателе
🖥 Как отсортировать список словарей по определенному полю?
Метод списка
.sort() и встроенная функция sorted() принимают параметр key. Им должен быть вызываемый объект, который принимает очередной элемент (в нашем случае словарь) и возвращает значение-критерий сортировки.
Код ниже показывает, как отсортировать список людей по возрасту:
users = [{'age': 30}, {'age': 20}, {'age': 10}]
users.sort(key=lambda user: user['age'])
>>> [{'age': 10}, {'age': 20}, {'age': 30}]👩💻 Антипаттерны в Python-коде, которые встречаются даже у опытных
Даже опытные разработчики пишут код, который потом сложно читать, отлаживать и сопровождать. Вот 5 антипаттернов, которые встречаются особенно часто — и что с ними делать.
1. Мутируемые значения по умолчанию
def append_item(item, items=[]):
items.append(item)
return items
Ошибка — items сохраняет состояние между вызовами. Итог — неожиданные данные.
✅ Правильно:
def append_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
2. Импорт всего (`from module import *`)
Так ты теряешь контроль над namespace и рискуешь конфликтами имён. Особенно опасно в больших проектах.
✅ Лучше явно:
from math import sqrt, pi
3. Голый `except:`
try:
do_something()
except:
pass
Так можно «поймать» даже KeyboardInterrupt, и программа зависнет.
✔️ Лучше:
try:
do_something()
except ValueError:
handle()
4. Чрезмерно вложенные list comprehensions
[x for x in lst if x > 0 if x < 100 if x % 2 == 0]
Читаемость? Нулевая.
✅ Явный цикл:
result = []
for x in lst:
if 0 < x < 100 and x % 2 == 0:
result.append(x)
5. Копирование ссылок на изменяемые объекты
data = [{}] * 3
data[0]["a"] = 1
print(data)
Ожидаешь три разных словаря? А получил три ссылки на один и тот же.
✅ Делай так:
data = [{} for _ in range(3)]
🗣️ Запомни: даже если код "работает", это не значит, что он хорош. Следи за чистотой — антипаттерны незаметны, но со временем превращают проект в хаос.⚡️
functools.cache вместо самодельного мемо — просто и эффективно
Зачем писать свои кеши, если Python уже умеет это из коробки?
С версии 3.9 появился @cache — аналог lru_cache, но проще и быстрее, если тебе не нужен лимит.
✅ Было так (ручной мемо):
_cache = {}
def fib(n):
if n in _cache:
return _cache[n]
if n <= 1:
return n
_cache[n] = fib(n-1) + fib(n-2)
return _cache[n]
🧠 Работает, но нужно писать проверку, хранить словарь, вручную всё продумывать.
🔄 А теперь просто:
from functools import cache
@cache
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
👏 Всё! Автоматически кеширует, ничего лишнего не пишем.
📌 Отличия от @lru_cache
from functools import lru_cache, cache
🟢 @lru_cache: можно задать размер (maxsize), есть контроль
🟢 @cache: просто бесконечный кеш всех входов → выходов
Если не нужна "очистка", бери @cache — он быстрее и проще.
🧪 Пример с реальным использованием:
from functools import cache
import requests
@cache
def get_user_info(user_id):
print("Запрос к API...")
return requests.get(f"https://api.example.com/users/{user_id}").json()
get_user_info(42) # Выполнит запрос
get_user_info(42) # Возьмёт из кеша
➡️ Отлично для API, парсинга, тяжёлых вычислений.
🗣️ Запомни: @functools.cache — это твой встроенный кеш без лишнего кода.
Хорош для любых чистых функций, где важна скорость и повторяемость.
Не изобретай велосипед — используй cache.Не трать годы на нелюбимую работу.
Через год ты все так же можешь ждать пятницу, считать часы до конца рабочего дня и откладывать свои мечты. А можешь уже сегодня начать осваивать навык, который способен открыть перед тобой новые возможности.
На обучении ты научишься создавать современные сайты с нуля, освоишь HTML, CSS, JavaScript и React, выполнишь реальные проекты и соберешь портфолио, которое станет отличным стартом в веб-разработке.
Будущее не меняется само по себе. Оно меняется с первого решения.
Сделай этот шаг сегодня.
Дмитрий
👩💻 DSL в Python через
__call__ и __getitem__ — красиво, читаемо, Pythonic
Хочешь, чтобы твой код выглядел как язык сам по себе?
Python позволяет строить мини-языки внутри кода — без библиотек, просто на магии dunder-методов.
✔️ Начнём с __call__
Он делает объект вызываемым, как функцию:
class Hello:
def __call__(self, name):
return f"Привет, {name}!"
h = Hello()
print(h("Мир")) # Привет, Мир!
Полезно, когда хочется сделать объекты лаконичными. Можно даже прокидывать параметры как в обычной функции.
✔️ Теперь __getitem__
Позволяет обращаться к объекту через квадратные скобки:
class SecretBox:
def __getitem__(self, key):
return f"🔒 Внутри: {key}"
box = SecretBox()
print(box["password"]) # 🔒 Внутри: password
Ты можешь использовать это для красивого синтаксиса без точек и скобок.
🤝 Комбинируем в DSL
class SQL:
def __call__(self, table):
return f"SELECT * FROM {table}"
def __getitem__(self, field):
return f'"{field}"'
q = SQL()
print(q("users")) # SELECT * FROM users
print(q["email"]) # "email"
Теперь у нас объект, который и вызывает таблицу, и красиво оформляет поля.
🧪 Более мощный пример: API-доступ
class API:
def __init__(self, base):
self.base = base
def __getitem__(self, endpoint):
return f"{self.base}/{endpoint}"
def __call__(self, endpoint, **params):
query = "&".join(f"{k}={v}" for k, v in params.items())
return f"{self.base}/{endpoint}?{query}"
api = API("https://api.server")
print(api["users"]) # https://api.server/users
print(api("users", id=5, active=True)) # https://api.server/users?id=5&active=True
Такой подход часто используют в клиентах к REST API, чтобы код выглядел как естественный DSL.
🧰 А можно вообще без классов?
class K:
def __getitem__(self, key):
return lambda d: d.get(key)
k = K()
data = {"name": "Neo", "role": "Hacker"}
print(k["name"](data)) # Neo
print(k["role"](data)) # Hacker
Так строятся мини-функции доступа к полям. Особенно круто в map/filter.
🗣️ Запомни: __call__ и __getitem__ — это способ превратить скучные объекты в выразительный синтаксис. Так строятся мини-языки прямо в Python: понятные, компактные и без лишнего шума.📱 Все еще думаешь, что LinkedIn — это место, где IT'шники ищут работу?
Конечно не без этого, но там есть вещи намного интересней
В канале Отель гранд LinkedIn рассказывают:
🔘Как продвигать свои услуги на огромную аудиторию бесплатно.
🔘Как выстроить свой личный бренд на платформе.
🔘Как «хакнуть» алгоритмы сервиса
Перестать игнорировать LinkedIn и начни использовать его как реальный инструмент для карьерного роста:
https://t.me/+3ZYEt_hE2Ww3ZjFi
