fa
Feedback
Программистика

Программистика

کانال بسته

Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager

نمایش بیشتر
5 580
مشترکین
-524 ساعت
-437 روز
-10430 روز

در حال بارگیری داده...

کانال‌های مشابه
هیچ داده‌ای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئن '26
ژوئن '26
+27
در 10 کانال‌ها
مه '26
+80
در 25 کانال‌ها
Get PRO
آوریل '26
+240
در 40 کانال‌ها
Get PRO
مارس '26
+352
در 85 کانال‌ها
Get PRO
فوریه '26
+120
در 7 کانال‌ها
Get PRO
ژانویه '26
+273
در 15 کانال‌ها
Get PRO
دسامبر '25
+186
در 52 کانال‌ها
Get PRO
نوامبر '25
+488
در 84 کانال‌ها
Get PRO
اکتبر '25
+43
در 16 کانال‌ها
Get PRO
سپتامبر '25
+62
در 1 کانال‌ها
Get PRO
اوت '25
+649
در 34 کانال‌ها
Get PRO
ژوئیه '25
+172
در 43 کانال‌ها
Get PRO
ژوئن '25
+306
در 26 کانال‌ها
Get PRO
مه '25
+75
در 4 کانال‌ها
Get PRO
آوریل '25
+80
در 1 کانال‌ها
Get PRO
مارس '25
+176
در 17 کانال‌ها
Get PRO
فوریه '25
+375
در 30 کانال‌ها
Get PRO
ژانویه '25
+326
در 18 کانال‌ها
Get PRO
دسامبر '24
+656
در 26 کانال‌ها
Get PRO
نوامبر '24
+350
در 14 کانال‌ها
Get PRO
اکتبر '24
+904
در 42 کانال‌ها
Get PRO
سپتامبر '24
+167
در 18 کانال‌ها
Get PRO
اوت '24
+153
در 3 کانال‌ها
Get PRO
ژوئیه '24
+611
در 18 کانال‌ها
Get PRO
ژوئن '24
+451
در 10 کانال‌ها
Get PRO
مه '24
+1 207
در 32 کانال‌ها
Get PRO
آوریل '24
+315
در 9 کانال‌ها
Get PRO
مارس '24
+101
در 4 کانال‌ها
Get PRO
فوریه '24
+180
در 12 کانال‌ها
Get PRO
ژانویه '24
+413
در 20 کانال‌ها
Get PRO
دسامبر '23
+30
در 4 کانال‌ها
Get PRO
نوامبر '23
+250
در 9 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
24 ژوئن0
23 ژوئن0
22 ژوئن0
21 ژوئن0
20 ژوئن0
19 ژوئن+1
18 ژوئن0
17 ژوئن0
16 ژوئن+3
15 ژوئن+1
14 ژوئن0
13 ژوئن0
12 ژوئن0
11 ژوئن0
10 ژوئن+2
09 ژوئن0
08 ژوئن+19
07 ژوئن0
06 ژوئن0
05 ژوئن0
04 ژوئن0
03 ژوئن+1
02 ژوئن0
01 ژوئن0
پست‌های کانال
🧠 Загадка на ночь: что выведет этот код?
def func(x):
    x = x + [1]
    return x

a = [0]
b = func(a)
print(a, b)
Варианты: 1. [0] [0, 1] 2. [0, 1] [0, 1] 3. [0] [1] 4. Ошибка Пиши свой вариант в комментарии! Ответ и разбор — через пару часов 🔥 Программистика|| #quiz

2
Вы не пользуетесь даже 10% функциями нейросетей Вы знали, что с помощью ChatGPT можно пересылать деньги с карты на карту? А с
Вы не пользуетесь даже 10% функциями нейросетей Вы знали, что с помощью ChatGPT можно пересылать деньги с карты на карту? А слышали про режим в Claude, где он по голосовому сообщению создает 5-10 минутный ролик на YouTube? Чтобы выжать из нейронок максимум, пользуйтесь каналом ИИнтеллигенция. Там узнаете: ➜ Как бесплатно активировать Pro-тариф в ChatGPT и Gemini ➜ Какая нейронка за вас пройдет собеседование на работу ➜ Как с помощью ИИ восстановить удалённые сообщения в ТГ Подписывайтесь, потом сами себе спасибо скажете: https://t.me/+oyn1gm14ZwZhNDAy
308
3
🔍 Секрет `next()`: найди первый подходящий элемент без цикла Нужно найти первый элемент в списке, удовлетворяющий условию? Вместо цикла с break используйте next() с генератором. ❌ Было (цикл с флагом): first = None for item in items: if item > 10: first = item break ✅ Стало (одна строка): first = next((item for item in items if item > 10), None) next(iterable, default) возвращает следующий элемент итератора или default, если элементов больше нет. Идеально для поиска без лишнего кода. 🟢 Где пригодится: поиск первого валидного элемента, чтение первой строки из файла по условию, получение первого значения из генератора. Запомни: next() + генератор = чистый и быстрый поиск. Программистика|| #tips
343
4
🧰 Pelutils: швейцарский нож для Python-проектов В каждом проекте рано или поздно появляется один и тот же набор утилит: удобный логгер с цветным выводом, парсер конфигов, таймер для замеров производительности, работа с JSON… Можно каждый раз писать это заново, а можно взять готовый инструмент, который уже всё умеет. Pelutils — это именно такой набор. Логгер с цветным выводом, стектрейсами и ротацией файлов, парсер, объединяющий CLI-аргументы и конфиги, таймер в стиле Matlab (tic/toc), профайлер, расширение для pydantic с сериализацией в человекочитаемый JSON, форматирование таблиц с поддержкой LaTeX и даже unique для массивов, работающий за линейное время. 📦 Установка: pip install pelutils Поддерживается Python 3.9+. 🧪 Пример: from pelutils import TT # Замер времени TT.tick() # ... ваш код ... print(f"Время: {TT.tock():.2f} сек") # Профилирование with TT.profile("Мой код"): # ... код ... print(TT) # Таблица с результатами Программистика|| #Репозиторий
403
5
Программистика
Программистика
473
6
🔠 Слили 4 ТБ по IT, хакингу и разработке. ⚪️ Все лучшие инструкции, гайды, книги и инструменты — без воды. 🖥 Курсы & GitHub
🔠 Слили 4 ТБ по IT, хакингу и разработке. ⚪️ Все лучшие инструкции, гайды, книги и инструменты — без воды. 🖥 Курсы & GitHub — 579GB ☁️ Хакинг & ИБ — 756GB 🤒 OSINT — 315GB ⌨️ Python — 955GB 🙃 Linux & Bash — 459GB 😦 Работа в IT — 278GB 🖥 Общий архив — 946GB ➡️ Присоединяйтесь и скачивайте. Пост будет удален через 48 часов.
471
7
💻 Вопрос из собеседования: Чем отличается `__getattr__` от `__getattribute__`? Этот вопрос проверяет, насколько глубоко вы понимаете механизм доступа к атрибутам в Python. Оба метода перехватывают обращение к атрибутам, но работают по‑разному и в разных ситуациях. Путаница в них может привести к трудноуловимым багам, особенно в прокси‑классах и ORM. class Example: def __getattr__(self, name): print(f"__getattr__: {name}") return None def __getattribute__(self, name): print(f"__getattribute__: {name}") return super().__getattribute__(name) obj = Example() obj.x # __getattribute__: x → __getattr__: x → None 👉 Базовый ответ (которого ждут): - __getattribute__ вызывается при любом обращении к атрибуту (даже если он существует). - __getattr__ вызывается только если обычный поиск атрибута не удался (т.е. атрибут не найден ни в __dict__, ни в родителях, ни через дескрипторы). 👉 Глубокий разбор (для мидла+): 1. `__getattribute__` — это первая точка входа. Он перехватывает все обращения, включая доступ к self.__dict__, и если вы не будете осторожны, легко уйти в бесконечную рекурсию. 2. `__getattr__` — это «запасной аэродром». Он срабатывает только после того, как стандартный поиск провалился. 3. Порядок поиска атрибута: - data‑дескриптор в классе → атрибут экземпляра → non‑data дескриптор → __getattr__ → AttributeError. 4. Где применяются: - __getattr__ удобен для динамических атрибутов (например, в ORM, где поле может отсутствовать в модели, но быть в базе данных). - __getattribute__ используется реже — для строгого контроля доступа (логирование, валидация), но требует аккуратной работы с super(). ⚠️ Ловушки и частые ошибки: 1. Бесконечная рекурсия в `__getattribute__` — если внутри него обратиться к self.attr, он вызовет сам себя. def getattribute(self, name): return self.dict[name] # ❌ рекурсия! Правильно: return super().__getattribute__(name). 2. Забыть, что `__getattr__` не сработает для существующих атрибутов — если вы динамически создаёте атрибут, он станет существующим, и __getattr__ больше не будет вызван. 3. Путаница с `__setattr__` — есть отдельный метод для перехвата записи атрибутов. 🧪 Пример: динамический доступ с `__getattr__` class DynamicAttrs: def __init__(self): self.data = {'name': 'Алиса', 'age': 30} def __getattr__(self, name): if name in self.data: return self.data[name] raise AttributeError(f"Нет атрибута {name}") obj = DynamicAttrs() print(obj.name) # Алиса print(obj.age) # 30 print(obj.city) # AttributeError Пример: логирование через `__getattribute__` class LoggedAttrs: def __getattribute__(self, name): value = super().__getattribute__(name) print(f"Доступ к {name}: {value}") return value Программистика|| #jobs
456
8
🚫 5 ошибок новичков в Python (и как их не допускать) Каждый начинающий разработчик наступает на одни и те же грабли. Эти ошибки кажутся мелочами, но они могут стоить часов отладки. Вот список самых частых — и как их избежать. 1. Изменяемые объекты как аргументы по умолчанию ❌ Плохо: def add_user(name, users=[]): users.append(name) return users print(add_user("Алиса")) # ['Алиса'] print(add_user("Боб")) # ['Алиса', 'Боб'] — сюрприз! ✔️ Хорошо: def add_user(name, users=None): if users is None: users = [] users.append(name) return users Почему: Аргумент по умолчанию создаётся один раз при определении функции, а не при каждом вызове. Список общий для всех вызовов. 2. `==` vs `is` — сравнение значений и идентичности ❌ Плохо: if a is 5: # работает, но не гарантировано print("Пять") ✔️ Хорошо: if a == 5: # сравниваем значения print("Пять") Почему: is сравнивает идентичность объектов (адреса памяти), == — значения. Для чисел и строк Python иногда кэширует объекты, но полагаться на это нельзя. Используйте is только для None и констант. 3. Изменение списка во время итерации ❌ Плохо: numbers = [1, 2, 3, 4, 5] for x in numbers: if x % 2 == 0: numbers.remove(x) print(numbers) # [1, 3, 5] — не все чётные удалены ✔️ Хорошо: numbers = [1, 2, 3, 4, 5] numbers = [x for x in numbers if x % 2 != 0] print(numbers) # [1, 3, 5] # Или итерация по копии: for x in numbers[:]: if x % 2 == 0: numbers.remove(x) Почему: При удалении элементов индексы сдвигаются, и итератор может пропускать элементы. --- 4. Конкатенация строк в цикле (`+` вместо `join`) ❌ Плохо: result = "" for word in ["A", "B", "C"]: result += word ✅ Хорошо: result = "".join(["A", "B", "C"]) Почему: Строки неизменяемы. Каждая операция += создаёт новую строку, что приводит к квадратичному росту сложности. Для больших данных это ощутимо. 5. `range(len(...))` вместо `enumerate` ❌ Плохо: items = ['a', 'b', 'c'] for i in range(len(items)): print(i, items[i]) ✔️ Хорошо: items = ['a', 'b', 'c'] for i, item in enumerate(items): print(i, item) Почему: Код с enumerate читается лучше, он меньше подвержен ошибкам и работает с любыми итерируемыми объектами, а не только с индексируемыми. 💡 Запомни: 🔴 Избегай изменяемых объектов как аргументов по умолчанию. 🔴 == для значений, is для идентичности (особенно с None). 🔴 Не изменяй список во время итерации — используй копию или списковое включение. 🔴 Для сборки строк используй ''.join(). 🔴 В цикле с индексом и значением предпочти enumerate Программистика|| #doc
508
9
👩‍💻 Гайд по Python параллелизму: Async, Потоки, Процессы 📱 Первоисточник Программистика|| #video
👩‍💻 Гайд по Python параллелизму: Async, Потоки, Процессы 📱 Первоисточник Программистика|| #video
665
10
🧹 Лайфхак: `_` для игнорирования значений При распаковке часто попадаются ненужные элементы. Не придумывайте имена для мусора — используйте подчёркивание. # Берём только первый и последний first, *_, last = [10, 20, 30, 40, 50] print(first, last) # 10 50 # Игнорируем второй элемент x, _, z = (1, 2, 3) print(x, z) # 1 3 # В циклах, если индекс не нужен for _ in range(5): print("Привет") 🟢 Запомни: _ — обычная допустимая переменная, но по соглашению означает «значение не нужно». Экономит имена и показывает намерение. Программистика|| #tips
942
11
🖥 Cookiecutter — это кроссплатформенный инструмент командной строки для быстрого создания проектов на основе шаблонов! Он ис
🖥 Cookiecutter — это кроссплатформенный инструмент командной строки для быстрого создания проектов на основе шаблонов! Он используется для генерации проектов в различных языках программирования, включая Python, C и другие, упрощая настройку стандартных структур каталогов и файлов. 💡 Cookiecutter позволяет создавать проекты, используя как удалённые шаблоны (например, из GitHub), так и локальные, без необходимости знаний Python. Инструмент поддерживает пользовательские параметры, расширяемость, работу с любым форматом файлов, а также интеграцию с pipx для удобной установки. Программистика|| #Репозиторий
987
12
Решать технические задачи — самая простая часть работы в IT. Сложности начинаются там, где нужно договариваться со смежниками
Решать технические задачи — самая простая часть работы в IT. Сложности начинаются там, где нужно договариваться со смежниками, выстраивать процессы в хаосе и осознанно управлять карьерой. В канале @ulshinblog Никита (руководитель разработки в Highload, 10+ лет в IT) разбирает эти темы через понятную логику и личный опыт: 📍 Как пройти секцию System Design? Пошаговый чек-лист от интервьюера; 📍 Как находить внутренние сайд-проекты, которые принесут пользу и бизнесу, и вашему карьерному росту; 📍 Защита от плохой обратной связи: как вежливо поставить на место коллегу с неконструктивным фидбеком; 📍 Инженерный конвейер самообучения: как перестать читать книги для галочки и внедрять знания в жизнь и карьеру; 📚 База 50+ авторских обзоров IT-литературы для сильного инженера: разработка, управление, архитектура, мышление. 👉 Присоединяйтесь
360
13
Программистика|| #doc
Программистика|| #doc
1 005
14
🧩 Распаковка (unpacking) по-взрослому: `*`, `` и всё, что вы могли пропустить** Все знают a, b = 1, 2. Но распаковка в Python гораздо глубже. Это мощный инструмент, который позволяет писать лаконичный и выразительный код без лишних индексов и временных переменных. Разбираем продвинутые приёмы. 📦 Распаковка с `*` (звёздочка) — остаток последовательности Звёздочка забирает «всё остальное» в список. first, *middle, last = [1, 2, 3, 4, 5] print(first) # 1 print(middle) # [2, 3, 4] print(last) # 5 Можно использовать в любом месте, но только один раз. *_, last = [1, 2, 3] # игнорируем всё, кроме последнего print(last) # 3 📦 Распаковка итераторов (не только списков) Звёздочка работает с любым итерируемым объектом. def gen(): yield 1 yield 2 yield 3 first, *rest = gen() print(first, rest) # 1 [2, 3] 📦 Распаковка в вызовах функций: `func(*args)` Передаём элементы списка как отдельные аргументы. def add(a, b, c): return a + b + c nums = [10, 20, 30] print(add(*nums)) # 60 Особенно полезно для print: items = ['a', 'b', 'c'] print(*items, sep=', ') # a, b, c 📦 Распаковка словарей: `**kwargs` Две звёздочки — для словарей. Передаёт пары ключ-значение как именованные аргументы. def user_info(name, age): print(f"{name}, {age} лет") data = {'name': 'Алиса', 'age': 30} user_info(**data) # Алиса, 30 лет 💡 Запомни: - * — распаковывает последовательности (списки, кортежи, строки, генераторы). - ** — распаковывает словари (в именованные аргументы или слияние). - Можно комбинировать в одном выражении. - Не злоупотребляй сложной вложенной распаковкой — читаемость важнее. Программистика|| #doc
992
15
Программистика||#Шпора
Программистика||#Шпора
1 364
16
Программистика
Программистика
909
17
👩‍💻 fastapi-injectable — расширение для FastAPI, которое улучшает систему внедрения зависимостей, делая её доступной за пре
👩‍💻 fastapi-injectable — расширение для FastAPI, которое улучшает систему внедрения зависимостей, делая её доступной за пределами HTTP-маршрутов! Это особенно полезно для случаев, когда нужно использовать зависимости в контекстах, таких как фоновые задачи, команды CLI, или другие сценарии, не связанные с обработкой HTTP-запросов. Библиотека предоставляет возможность применения декоратора Depends для внедрения зависимостей в различных частях приложения, что упрощает повторное использование кода и делает архитектуру более гибкой. Программистика|| #Репозиторий
1 098
18
🧠 Загадка на ночь: что выведет этот код? print(any([])) print(all([])) Варианты: 1. False и False 2. True и True 3. False и True 4. True и False Пиши свой вариант в комментарии! Программистика || #quiz
1 008
19
🔥 Логируй как профи: что не так с print() и как писать логи правильно Логирование — это как чёрный ящик самолёта: пока всё работает, про него не думаешь. Но когда что-то ломается, без него — катастрофа. И да, print() — это не логирование, даже если вы очень его любите. 🧱 Почему не print()? 🟢 print() не умеет разделять уровни сообщений (ошибка или просто инфо) 🟢 Его нельзя легко перенаправить в файл или на удалённый сервер 🟢 В продакшене вы не сможете отследить проблему, если логи разбросаны по консоли 📌 Базовое логирование import logging logging.basicConfig(level=logging.INFO) logging.info("Приложение запущено") 📎 basicConfig быстро включит логирование, но на продакшене лучше задавать формат и место хранения. 🎯 Уровни логов 🟢 DEBUG — детальная отладка 🟢INFO — обычная информация 🟢 WARNING — что-то подозрительное 🟢ERROR — ошибка, но система ещё жива 🟢CRITICAL — всё очень плохо 📦 Логи в файл logging.basicConfig( filename='app.log', level=logging.INFO, format='%(asctime)s — %(levelname)s — %(message)s' ) Теперь логи сохраняются в app.log с временем и уровнем. 🔄 Ротация логов Чтобы файл логов не вырос до гигабайтов: from logging.handlers import RotatingFileHandler handler = RotatingFileHandler('app.log', maxBytes=2_000_000, backupCount=5) logging.basicConfig( handlers=[handler], level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) 📎 При достижении 2MB файл заменяется, и хранится 5 последних копий. 🧪 Логируем ошибки с трассировкой try: 1 / 0 except ZeroDivisionError: logging.exception("Ошибка деления на ноль") ➡️logging.exception() автоматически добавляет traceback в лог. 💡 Запомни: 🟢 Не логируй пароли и токены 🟢 Разделяй уровни — не пиши error там, где warning 🟢 Настрой логи под продакшен заранее, а не когда уже горит Программистика || #Статья
1 056
20
⚡️ Tyro — это инструмент для генерации CLI-интерфейсов из аннотированного по типам кода Python. В отличие от устаревшего argp
⚡️ Tyro — это инструмент для генерации CLI-интерфейсов из аннотированного по типам кода Python. В отличие от устаревшего argparse, он позволяет определять аргументы стандартными аннотациями типов, значениями по умолчанию и строками документации (docstrings). Всё, что вам нужно — это определить функцию или датакласс и передать его в tyro.cli(). Инструмент отлично распознаётся IDE и статическими анализаторами (mypy, Pyright), поддерживает вложенные структуры, подкоманды и генерацию удобного текста помощи. Это лучший выбор для создания типобезопасных и хорошо документированных CLI-утилит. 🐱 Ссылка на GitHub Программистика || #Репозиторий
882