Программистика
Canal cerrado
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
Mostrar más5 579
Suscriptores
-524 horas
-437 días
-10430 días
Archivo de publicaciones
5 579
🔥Стажировки и вакансии для IT специалистов
- Вакансии которых нет на джоб-агрегаторах
- Только прямые контакты HR в Telegram
🤖 ML & DS 👩💻 DevOps
👨✈️ ИБ & OSINT 👣 Go
👩💻 Mobile 👩💻 C#
👩💻 Node.js 👩💻 Python
🔎 QA 👩💻 Java
👩💻 UX/UI 👩💻 Frontend
🖼️ PHP 📋 Analyst
💼 1C 🖥 SQL
👩💻 IT HR
Пока другие листают джоб-сайты — ты уже пишешь HR в Telegram.
5 579
⚡️ Писать код руками больше не нужно!
Привет. Меня зовут Кирилл. Я создаю топовые подборки с уроками по AI и вайбкодингу:
— 60+ промптов для дебага: поиск ошибок, оптимизация кода
— 40 бесплатных курсов по вайбкодингу
— 150 гайдов, как использовать ChatGPT, Claude Code, Antigravity, Cursor, Perplexity, Lovable
— 100 готовых модулей: авторизация, админки, логирование, тесты, i18n
— 37 MCP серверов: дизайн, разработка, Тесты/QA, деплой
Всего 10 минут в день на канале и ты начнешь писать код на 85% быстрее и сможешь за пару дней закрывать спринты.
Подписывайся, чтобы получать подборки каждую неделю!
5 579
💻 Вопрос с собеседования: Чем отличается оператор `is` от `==` в Python?
Это один из тех вопросов, которые задают, чтобы проверить, понимает ли кандидат разницу между значениями объектов и их идентичностью. Новички часто путают эти операторы и используют их как попало, что может привести к трудноуловимым багам.
📌 Базовый ответ (которого ждут от джуна):
-
== сравнивает значения объектов. Он возвращает True, если содержимое объектов равно.
- is сравнивает идентичность объектов. Он возвращает True, если две переменные ссылаются на один и тот же объект в памяти.
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True — значения одинаковые
print(a is b) # False — это разные объекты
print(a is c) # True — это один и тот же объект
🧱 Глубокий разбор (для мидла и сеньора):
1. Как работает `==` под капотом
Оператор == вызывает магический метод __eq__() левого операнда. Для пользовательских классов можно переопределить __eq__, чтобы задать свою логику сравнения. По умолчанию __eq__ у object сравнивает по is (т.е. по идентичности).
class MyClass:
def __init__(self, x):
self.x = x
def __eq__(self, other):
return self.x == other.x
a = MyClass(10)
b = MyClass(10)
print(a == b) # True, потому что мы определили __eq__
print(a is b) # False — разные объекты
2. Интернирование и кэширование
Python кэширует некоторые неизменяемые объекты для экономии памяти. Например, малые целые числа (от -5 до 256) и короткие строки без пробелов могут быть интернированы. Это значит, что при создании таких значений может использоваться один и тот же объект.
x = 256
y = 256
print(x is y) # True (часто, но не гарантировано — зависит от реализации)
x = 257
y = 257
print(x is y) # False — числа вне диапазона кэширования обычно создаются заново
3. Особые случаи: `None`, `True`, `False`
Константы None, True, False — синглтоны. Существует только один объект None во всей программе. Поэтому их всегда сравнивают через is:
def func(x=None):
if x is None: # правильно
...
# if x == None: # работает, но менее идиоматично и может быть медленнее
4. Ловушка с плавающей точкой
NaN (not a number) не равен самому себе по ==, но по is может сбивать с толку:
import math
nan = float('nan')
print(nan == nan) # False! Так определен стандартом IEEE 754
print(nan is nan) # True (но это потому что это один объект)
Поэтому для проверки на NaN лучше использовать math.isnan().
⚠️ Когда `is` использовать правильно:
- Для сравнения с синглтонами: None, True, False.
- Для проверки, являются ли две переменные одним и тем же объектом (редко нужно в прикладном коде, чаще в отладке или при работе с кэшами).
Когда `is` использовать опасно:
Для сравнения чисел, строк, списков, словарей — там, где важны значения, а не идентичность. Иначе код может неожиданно сломаться при изменении данных или на другом интерпретаторе.
💡 Итоговый ответ для собеседования:
1. == сравнивает значения, is — идентичность объектов.
2. == можно переопределить в пользовательских классах через __eq__.
3. Для неизменяемых типов (int, str) Python иногда кэширует объекты, поэтому is может случайно сработать, но полагаться на это нельзя.
4. Константы None, True, False всегда сравниваются через is (это идиоматично).
5. В 99% случаев в коде нужно ==, кроме проверки на None.
Запомни: если ты используешь is для сравнения строк или чисел, ты создаёшь потенциальный баг. Всегда спрашивай себя: «Мне нужно сравнить содержимое или удостовериться, что это тот же самый объект?»
Удачи на собеседованиях! 🔥🔥
Программистика || #doc5 579
🔥 ПОЛУЧИТЕ БЕСПЛАТНЫЙ ДОСТУП К ПРАКТИКУМУ ПО СОЗДАНИЮ AI-АГЕНТОВ
🚀 AI-агенты - это системы, которые принимают решения, работают с данными, обращаются к сервисам и выполняют реальные задачи бизнеса
🦾🦾 И самое главное - сегодня их можно создавать быстро и без жёсткого кодинга, через vibe-coding
В практикум входит 5 занятий:
🔹 Основы Google AI Studio. Создание AI-секретаря по совещаниям
🔹 Основы промт-инжиниринга. Создание AI-продажника абонементов в фитнес-центр
🔹 Создание AI-ветеринара на Google AI Studio
🔹 Разбор самых востребованных AI-ассистентов и ключевых технологий 2026 года
🔹 AI-сервис по аренде автомобилей на базе N8N и weweb
💡 То, что раньше требовало команды разработчиков, теперь можно собрать быстрее, если понимаешь архитектуру и умеешь работать через AI
Если хотите начать создавать полноценные AI-системы - приходите 👇
🤖 Получить доступ
5 579
Как сделать цветные кнопки в Telegram боте | Aiogram + TeleBot
🎥 ПервоисточникПрограммистика|| #video
5 579
❖ Что делать в случае отключения России от глобального Интернета?
❖ Как не сливать государству гигабайты своих данных?
❖ Как обойти «глушилку» мобильной связи в регионах?
В 2026 году любое государство готово залезть к вам в прямую кишку ради контроля персональных данных. И тендеция только набирает обороты.
Чтобы щупальца РКН, правоохранителей и мошенников не коснулись вашей жизни, держите в подписках «PythonLab»
Анонимный хакер из российской группировки рассказывает как обходить ограничения, не оставлять «цифровые следы» и пользоваться топовыми нейронками без ограничений.
Сохраняйте, пока в стране во всю закручивают гайки, такие каналы — на вес золота: @TechLab
5 579
👩💻 `filter`: когда нужны не все элементы, а только хорошие
Многие, отфильтровывая элементы, пишут громоздкие циклы с
if и append. Но в Python есть встроенная функция, которая делает это элегантнее и часто быстрее — filter().
❌ Было (долго и нудно):
nums = [1, 2, 3, 4, 5, 6]
evens = []
for num in nums:
if num % 2 == 0:
evens.append(num)
✔️ Стало (кратко и функционально):
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
Что делает `filter`
filter(function, iterable) применяет функцию к каждому элементу итерируемого объекта и возвращает итератор только с теми элементами, для которых функция вернула True.
def is_positive(x):
return x > 0
numbers = [-2, -1, 0, 1, 2]
positive = list(filter(is_positive, numbers)) # [1, 2]
🟢 Важно: filter возвращает итератор, а не список. Если нужен список — оборачивай в list().
Преимущества:
🟢 Читаемость: сразу понятно — "фильтруем элементы по условию".
🟢 Ленивость: можно обрабатывать огромные последовательности, не загружая всё в память.
🟢 Компактность: не нужно писать цикл с append.
🟢 Скорость: для больших данных может быть быстрее, чем цикл на Python.
Практический пример
Допустим, есть список пользователей, нужно оставить только совершеннолетних:
users = [
{'name': 'Алиса', 'age': 17},
{'name': 'Боб', 'age': 25},
{'name': 'Карл', 'age': 16}
]
adults = list(filter(lambda user: user['age'] >= 18, users))
print(adults) # [{'name': 'Боб', 'age': 25}]
Когда `filter` — это хорошо:
✔️ У тебя уже есть готовая функция (особенно встроенная), которая возвращает bool. ✔️ Данные большие, и ленивость важна. ✔️ Хочешь код в функциональном стиле без побочных эффектов. ✔️ Комбинируешь с map, reduce и другими функциональными инструментами.Когда `filter` — не лучший выбор: ❌ Условие сложное и требует много строк — лучше вынести в отдельную функцию и использовать её в
filter.
❌ Нужно не только отфильтровать, но и преобразовать элементы — тогда filter + map могут быть тяжелее, чем одно списковое включение.
❌ Для простых условий списковое включение часто читается понятнее:
# filter
evens = list(filter(lambda x: x % 2 == 0, nums))
# list comprehension (часто предпочтительнее)
evens = [x for x in nums if x % 2 == 0]
filter делает код чище и короче, но, как и любой инструмент, требует осознанного подхода.
Программистика || #doc5 579
🚀 Создавать IT-проекты сегодня можно в разы быстрее с помощью AI
🌎🌟 Все благодаря vibe coding
Когда вы не пишете код строка за строкой, а управляете разработкой через искусственный интеллект
🦾🦾 Университет искусственного интеллекта - один из крупнейших образовательных проектов по AI в России и СНГ
🤖 Уже 7 лет мы обучаем работе с искусственным интеллектом, выпустили более 11 000 студентов и собрали самую большую базу практического контента по AI
🔥🔥 Мы запустили Vibe Coding School, где разберем:
🔹 Создание web-приложений через Google AI Studio
🔹 Разработку backend на Python через GPT
🔹 Работу с базами данных
🔹 Создание реальных AI-проектов
🌎🌎🌎 Спикер - Дмитрий Романов, Senior AI, AI-разработчик с 2003 года, руководитель IT-проектов и основатель Университета
Если хотите научиться быстро создавать свои IT-проекты и AI-сервисы, приходите 👇
🤖 Подробнее о программе
5 579
💻 Вопрос с собеседования: Что произойдёт, если изменить список (list) во время итерации по нему?
Это вопрос-ловушка, который часто задают, чтобы проверить, понимает ли кандидат внутреннее устройство итераторов. Новички обычно говорят «ничего страшного», а потом получают исключение или неожиданное поведение.
📌 Базовый ответ (которого ждут от джуна):
Изменять список во время итерации по нему — плохая практика. Это может привести к пропуску элементов, бесконечному циклу или исключению
RuntimeError.
# ❌ Так делать не надо
lst = [1, 2, 3, 4, 5]
for x in lst:
if x % 2 == 0:
lst.remove(x)
print(lst) # [1, 3, 5] — кажется, работает? Но не всегда!
Почему это опасно? При удалении элемента индексы сдвигаются, и цикл может пропустить следующий элемент или выйти за границы.
🧱 Глубокий разбор (для мидла и сеньора):
1. Что происходит под капотом?
Когда ты пишешь for x in lst:, Python создаёт итератор (через iter(lst)). Итератор запоминает текущую позицию по индексу. Если во время итерации ты удаляешь или добавляешь элементы, структура списка меняется, но итератор продолжает двигаться по старым индексам.🟢
lst = [1, 2, 3, 4, 5]
it = iter(lst)
print(next(it)) # 1
lst.remove(2) # список стал [1, 3, 4, 5]
print(next(it)) # 3 (элемент на позиции 1) — элемент 2 пропущен!
2. Разные типы ошибок:
🟢 Удаление: пропуск элементов (как выше) или IndexError, если удалить слишком много.
🟢 Добавление: бесконечный цикл, если добавлять элементы в конец.
🟢 Для словарей: RuntimeError: dictionary changed size during iteration — словари вообще нельзя менять во время итерации.
# Словарь упадёт сразу
d = {'a': 1, 'b': 2}
for k in d:
d['c'] = 3 # RuntimeError!
3. Как правильно?
Самый безопасный способ — итерироваться по копии:
lst = [1, 2, 3, 4, 5]
for x in lst[:]: # копия списка
if x % 2 == 0:
lst.remove(x)
Или использовать списковое включение для создания нового списка:
lst = [x for x in lst if x % 2 != 0] # новый список без чётных
Для сложных случаев можно итерироваться по индексам в обратном порядке:
for i in range(len(lst)-1, -1, -1):
if lst[i] % 2 == 0:
del lst[i]
⚠️ Ловушки и частые ошибки:
1. Наивная вера в то, что всё работает: Пример с удалением чётных чисел иногда даёт правильный результат, если элементы расположены определённым образом. Это создаёт ложное чувство безопасности. 2. Итерация по файлу: При чтении файла построчно его нельзя менять (добавлять/удалять строки) без переоткрытия. 3. Использование `list.remove()` в цикле: Удаляет только первое вхождение, что тоже может привести к путанице.💡 Итог для собеседования: 1. Не изменяй итерируемый объект во время итерации. Это антипаттерн. 2. Если очень нужно — итерируйся по копии (
lst[:], list(lst), copy.copy).
3. Для фильтрации используй списковые включения ([x for x in lst if condition]).
4. Словари и множества вообще нельзя менять во время итерации — будет исключение.
5. Понимание этого вопроса показывает, что ты знаешь, как работают итераторы и память в Python.
Удачи на собеседованиях! 🔥🔥
Программистика || #jobs5 579
👩💻 `
map`: когда превращать данные лень писать руками, а когда это лишнее
Многие, узнав про функциональный стиль, начинают пихать map куда только можно: list(map(str, numbers)), map(lambda x: x**2, data). Но часто списковое включение (list comprehension) читается лучше и работает так же. Разбираемся, когда map реально нужен, а когда это просто дань моде.
Что делает `map`
map применяет функцию к каждому элементу итерируемого объекта и возвращает итератор с результатами. Самый простой способ превратить числа в строки:
nums = [1, 2, 3]
strings = list(map(str, nums))
В отличие от for, map выполняется на Си (если функция тоже на Си), и может быть быстрее для больших данных. Но для повседневных задач разница незаметна.
Преимущества
🟢 Краткость: map(str, data) короче, чем [str(x) for x in data].
🟢 Производительность: для встроенных функций (int, str, abs) map быстрее благодаря низкоуровневой реализации.
🟢 Ленивость: map возвращает итератор, поэтому можно не хранить весь результат в памяти (полезно для огромных последовательностей).
🟢 Композиция: можно передавать несколько итерируемых объектов: map(pow, [1,2,3], [4,5,6]) даст степени 1⁴, 2⁵, 3⁶.
Практический пример
Допустим, нужно прочитать числа из файла (каждая строка — число) и преобразовать их в целые:
with open('numbers.txt') as f:
# Плохо: сначала читаем все строки, потом преобразуем
lines = f.readlines()
nums = [int(line) for line in lines]
# Хорошо: лениво читаем и преобразуем
with open('numbers.txt') as f:
nums = list(map(int, f)) # f итерируется по строкам, int применяется к каждой
Здесь map экономит память (нет промежуточного списка строк) и код чище.
Когда `map` всё-таки уместен (и даже хорош)
1. Если функция уже есть и не требует `lambda`:
# так читаемо
result = list(map(str.upper, words))
# так тоже неплохо, но map короче
result = [w.upper() for w in words]
2. Если нужно обработать несколько итерируемых объектов параллельно (как zip, но с функцией):
totals = list(map(lambda x, y: x * y, prices, quantities))
3. При работе с большими потоками данных, где ленивость критична (например, генераторы).
Когда `map` — это зло (и лучше использовать `for` или `list comprehension`)
1. Сложная логика внутри `lambda`:
# ❌ нечитаемо
result = list(map(lambda x: x['age'] if x['age'] > 18 else 0, users))
# ✅ понятно
result = [user['age'] if user['age'] > 18 else 0 for user in users]
2. Если нужен только побочный эффект (например, print). map создаёт итератор, который надо потребить, что сбивает с толку:
# ❌ кто-то забыл list()
map(print, items) # ничего не выведет
3. Когда читаемость важнее микрооптимизаций. Для 100 элементов разницы нет, а [x**2 for x in data] читается как предложение.
💡 Запомни:
🟢 map — отличный выбор, когда у тебя уже есть готовая функция (особенно встроенная) и ты хочешь применить её к каждому элементу.
🟢 Для простых преобразований вроде x**2 списковое включение понятнее и питоничнее.
🟢 Ленивость map полезна при работе с гигантскими данными, которые не помещаются в память.
🟢 Не пытайся засунуть сложную логику в lambda — вынеси в отдельную функцию или используй обычный цикл.
Программистика || #doc5 579
🖥 Tach: Строгий контроль зависимостей в Python (на Rust)
В Python легко устроить спагетти-код: один модуль импортирует другой, тот — третий, и всё превращается в запутанный клубок.
Tach решает эту проблему, позволяя явно указывать, какие модули могут общаться друг с другом.
Он написан на Rust, работает мгновенно и внедряет концепцию строгих интерфейсов в Python.
Зачем это нужно:
1. Чистая архитектура: Видно, кто кого вызывает. Если модуль orders полез в users без разрешения — Tach даст по рукам. 2. Безопасный CI: Tach проверит код перед деплоем. Если кто-то добавил "быстрый костыль" с левым импортом — сборка упадёт. 3. Строгий режим: Можно запретить импортировать из модуля всё подряд, разрешив только то, что явно указано в "публичном интерфейсе".Как использовать:
pip install tach
tach mod # Интерактивная настройка границ
tach check # Проверка нарушений
Идеально для больших проектов и командной разработки, где нужно держать архитектуру под контролем, а не надеяться на "авось".
🐱 Ссылка на GitHub
Программистика || #Library5 579
На Stepik запустили курс «От новичка к уверенности в коде на Python»
Курс создан для новичков, которым важно не заучить команды, а понять логику. Наглядные схемы и визуальные разборы показывают, что происходит внутри программы и как она работает
Много практики, понятные объяснения решений не дадут застрять на теории. Материал предлагает вам не иллюзию знаний, а ощущение контроля: вы ясно видите как из нескольких строк кода рождается работающая программа
Что внутри:
✅переменные и типы данных
✅условия и логика программ
✅циклы и рекурсия
✅функции и работа с вводом данных
✅списки, словари и множества
✅базовое ООП
✅работа с библиотеками Python
✅десятки задач и упражнений
Эти знания фундамент для написания простых ботов и автоматизации задач
Скидка 25%, действует 48 часов
🔗Пройти курс на Stepik
5 579
Профессия после службы — со скидкой к 8 Марта
С 5 по 12 марта ОСЭК дает дополнительную скидку –8% на всё обучение.
Это предложение действует на всю программу, а не только на первый семестр.
Ваша выгода — до 38 300 ₽ за семестр.
Почему это удобно:
дистанционное обучение — можно совмещать со службой
поступление без ЕГЭ и ОГЭ
диплом государственного образца
возможность сократить обучение на полгода
поддержка специалистов колледжа на всех этапах
Это шанс получить новую профессию и подготовиться к следующему этапу карьеры.
Акция действует только до 12 марта.
Чтобы получить скидку:
выберите специальность
назовите промокод 8МАРТА
оплатите семестр обучения
Подать заявку
#реклама
О рекламодателе
5 579
🖥 Prefect — это фреймворк оркестрации рабочих процессов с открытым исходным кодом, предназначенный для создания надежных конвейеров обработки данных на Python! Он позволяет превращать Python-скрипты в производственные рабочие процессы с минимальными усилиями, обеспечивая автоматическое отслеживание состояния, обработку ошибок, планирование задач и мониторинг в реальном времени. С помощью Prefect вы можете строить динамические и устойчивые конвейеры данных, которые адаптируются к изменениям и восстанавливаются после сбоев.🐱 Ссылка на GitHub Программистика || #Library
5 579
⚡️РОЗЫГРЫШ В ЧЕСТЬ ОТКРЫТИЯ В MAX
Теперь наши каналы доступны не только здесь, но и на платформе MAX. В честь этого события разыгрываем три приза, которые усилят вашу защиту в сети.
ПРИЗОВОЙ ФОНД:
⚠️ 1 МЕСТО: YubiKey 5 Series
Физический ключ, который делает двухфакторную аутентификацию неуязвимой. Никакой фишинг и слив паролей не страшны, пока ключ у вас.
⚠️ 2 МЕСТО: SATOSHI VPN на 1 год
Полная анонимность и шифрование трафика. Ваши данные под защитой в любых сетях.
⚠️ 3 МЕСТО: Книга "Хакерская самооборона" (Андрей Жуков, 2026)
Актуальная новинка по активной обороне. Учитесь думать как хакер, чтобы защищаться от реальных угроз.
📎 УСЛОВИЯ ПРОСТЫЕ:
Быть подписанным на этот канал (где вы читаете пост).
Быть подписанным на все 4 канала в MAX по ссылкам ниже.
→ max.ru/becaps
→ max.ru/cyberins
→ max.ru/itbook_library
→ max.ru/nsis_cybersec
📌 Нажать кнопку "Участвую" под этим постом.
Итоги подведём ровно через 20 дней с помощью рандомайзера 28.03.26 14:00MSK.
5 579
👀 Python. Уроки для начинающих
В книге 22 урока, более 40 практических упражнений и заданий для самостоятельной работы. Описан язык Python: его основы, типы данных, управляющие выражения, функции, объекты, классы, исключения, модули и пакеты. Рассмотрены более развитые инструменты языка: установка и применение дополнительных библиотек, многопоточное, многопроцессное и конкурентное программирование, аннотации типов. Рассказано о практическом применении Python и различных библиотек для загрузки данных из Интернета, парсинга веб-страниц, работы с базами данных, программирования графических и веб-приложений, математических расчетов, вывода графиков и работы с искусственным интеллектом. Электронный архив на сайте издательства содержит все примеры из книги.Программистика || #doc
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
