
🔥 Заказ на 20+ каналов — шанс выиграть iPhone 16 Pro
Массовые размещения дают просмотры в 2-3 раза дешевле и участие в розыгрыше
Подробнее

РегистрацияВойтиВойти
Скидка 3,5% на первые три заказа
Получите скидку на первые три заказа!
Зарегистрируйтесь и получите скидку 3,5% на первые рекламные кампании — промокод активен 7 дней.
18.2

PytStart | Программирование на Python
5.0
2
Канал о разработке приложений на Python, в том числе написание backend и web-приложений. Аудитория канала - начинающие или опытные Python программисты.
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
%keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
1 958.04₽1 958.04₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
🖥 Как работает zip() в Python: синхронный перебор
🧵
zip()
объединяет несколько итерируемых объектов в кортежи по элементам.
🔧 Пример:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}"){}
📌 Вывод:
Alice: 85
Bob: 92
Charlie: 78{}
❗️ Что важно знать
- zip
останавливается по самому короткому из входов.
- Можно “распаковать” с помощью zip(*iterables)
.
pairs = [("a", 1), ("b", 2)]
letters, numbers = zip(*pairs)
print(letters) # ('a', 'b'){}
🗣 Используется в парном переборе, обработке CSV, генерации пар "ключ-значение", и везде, где нужно синхронизировать данные.1305
16:02
02.09.2025
🎭 Decorators в Python: меняем поведение функции без переписывания
Ты написал:
def greet(name):
print(f"Привет, {name}!"){}
А потом захотел добавить логирование, проверку ошибок или права доступа. Переписывать код не хочется.
👩💻 Python тебе ничего не скажет. Но выход есть — декораторы. Это «обёртки» вокруг функций, которые добавляют новое поведение.
📦 Пример: простое логирование
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Вызов {func.__name__}")
return func(*args, **kwargs)
return wrapper
@log_decorator
def greet(name):
print(f"Привет, {name}!")
greet("Анна"){}
➡️ Функция greet
осталась чистой, логика вынесена наружу.
🔑 Декораторы с параметрами
def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3)
def hello():
print("👋 Привет")
hello(){}
➡️ Теперь hello()
вызывается 3 раза подряд.
⚠️ Без functools.wraps
теряется имя функции
from functools import wraps
def safe(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
print("Ошибка:", e)
return wrapper
@safe
def divide(a, b):
return a / b{}
➡️ @wraps
сохраняет имя и docstring, иначе функция станет просто wrapper
.
🧪 Практика: где декораторы реально нужны
👍 Проверка прав
def require_admin(func):
def wrapper(user, *args, **kwargs):
if not user.get("is_admin"):
raise PermissionError("⛔️ Нет доступа")
return func(user, *args, **kwargs)
return wrapper
@require_admin
def delete_user(user, uid):
print(f"Удалён {uid}"){}
👍 Обработка ошибок
@safe
def risky(x):
return 10 / x
risky(0) # Ошибка перехвачена{}
👍 Комбинация декораторов
@safe
@log_decorator
def risky_op(x):
return 10 / x{}
➡️ Сначала лог, потом защита. Порядок имеет значение.
🗣️ Запомни: Декоратор = функция, которая принимает и возвращает функцию.1094
17:35
04.09.2025
🔍
__str__
🆚__repr__
: зачем два разных отображения объекта
В Python у любого объекта можно определить два разных способа отображения — __str__
и __repr__
. Кажется избыточным, но на деле это основа читаемости и отладки.
Разберём всё по полочкам 👇
🔍 str — человекочитаемый вывод
class User:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Пользователь {self.name}"
u = User("Иван")
print(u) # Пользователь Иван{}
➡️ __str__
нужен для красивого вывода в консоли, логах или интерфейсе. Его цель — понятность.
🛠 repr — точный «отладочный» вывод
class User:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"User(name={self.name!r})"
u = User("Иван")
print(repr(u)) # User(name='Иван'){}
➡️ __repr__
всегда должен быть однозначным. Его читают программисты и дебаггер, а не пользователи.
🖼 В интерактивной консоли вызывается repr
u = User("Иван")
u{}
➡️ Jupyter, IPython и REPL используют __repr__
. Поэтому именно он важен для отладки.
📑 Логи: str для людей, repr для разработчиков
print(str(u)) # Пользователь Иван
print(repr(u)) # User(name='Иван'){}
➡️В логах удобно комбинировать оба: человекочитаемый текст + точная структура.
🎭 Если нет str — используется repr
class Item:
def __repr__(self):
return "Item(id=42)"
i = Item()
print(i) # Item(id=42){}
➡️ Python подставляет __repr__
, если __str__
не определён. Но наоборот — не работает.
⚡️ Совмещённый подход
class Product:
def __init__(self, name, price):
self.name, self.price = name, price
def __repr__(self):
return f"Product({self.name!r}, {self.price})"
__str__ = __repr__ # одинаковый вывод{}
➡️Иногда удобно оставить один метод и приравнять их. Но чаще нужны оба.
🧩 Лучшие практики
🟢__repr__ должен быть «однозначным» (по возможности — похож на конструктор). 🟢 __str__ должен быть «дружелюбным» — читаться как текст. 🟢Если сомневаешься — реализуй хотя бы __repr__.🗣️ Запомни:
str
→ для пользователя, repr
→ для разработчика.В консоли, дебаге и коллекциях срабатывает именно repr
.Грамотное разделение делает код удобнее и чище, а логи — понятнее.1047
13:56
05.09.2025
imageИзображение не доступно для предпросмотра
👩💻 Всем программистам посвящается!
Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:
Выбирай своё направление:
👩💻 Java — t.me/java_ready
👩💻 Python — t.me/python_ready
🤔 InfoSec & Хакинг — t.me/hacking_ready
🖥 SQL & Базы Данных — t.me/sql_ready
🤖 Нейросети — t.me/neuro_ready
👩💻 C/C++ — https://t.me/cpp_ready
👩💻 C# & Unity — t.me/csharp_ready
👩💻 Linux — t.me/linux_ready
🖼️ DevOps — t.me/devops_ready
📖 IT Книги — t.me/books_ready
👩💻 Frontend — t.me/frontend_ready
📱 JavaScript — t.me/javascript_ready
👩💻 Backend — t.me/backend_ready
📱 GitHub & Git — t.me/github_ready
👩💻 Весь IT — t.me/it_ready
👩💻 Bash & Shell — t.me/bash_ready
🖥 Design — t.me/design_ready
📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!
820
10:12
05.09.2025
🤔 Слишком поздно заходить в IT в 2025?
Врать не буду: скорее да, чем нет — за последние пять лет порог вхождения сильно поднялся, и теперь нередко от джуна требуют навыки грейдом выше.
Что делать в такой ситуации? Учиться эффективнее остальных и знать, как подать себя на рынке других. Разобраться со всем этим вам поможет База Знаний — мест, где за вас уже отобрали лучшие материалы по самым востребованным вакансиям:
🖥 Python Dev: 1558+ материалов
👩💻 Frontend Dev: 1241+ материалов
👩💻 Backend Dev: 1095+ материалов
📊 Data Scientist: 978+ материалов
🎨 UX/UI Designer: 885+ материалов
📖 Книги по IT: 779+ материалов
Советую перейти и начать учиться уже сейчас — так уже к осени сможете претендовать на вакансию c хорошим окладом 👍
888
15:35
04.09.2025
imageИзображение не доступно для предпросмотра
Skillbox запустил бесплатный мини-курс по Data Science.
За 5 дней вы узнаете, чем ML Engineer отличается от Data Analyst и при чём здесь питон (то есть Python). Поймёте, как использовать нейросети в работе для автоматизации задач, а заодно выполните несколько практических заданий.
Занятия подходят для любого уровня подготовки.
Курс состоит из практики чуть менее чем полностью:
— Создадите умного чат-бота, который генерирует ответы с помощью нейросети
— Создадите нейросеть для подбора релевантных новостных статей
— Научитесь визуализировать данные с помощью Python
В общем, прокачаете навыки и наверняка узнаете что-то новое.
Зарегистрируйтесь прямо сейчас и получите гайд «Как пользоваться ChatGPT и Midjourney»: https://epic.st/YP1cH?erid=2VtzqweAUM9
🔥 Бонус: откроем доступ к записям конференции по нейросетям после первого урока. Узнаете, как использовать ИИ в работе и жизни.
670
10:02
06.09.2025
👩💻 Глобальные и локальные переменные в Python — почему
UnboundLocalError
ломает код
В Python переменные живут в разных областях видимости: локальной (функция), глобальной (модуль), и встроенной (len
, print
, и т. д.).
Новички часто сталкиваются с UnboundLocalError
— когда кажется, что переменная доступна, но интерпретатор думает иначе.
⚡️ Ошибка №1: доступ к глобальной переменной внутри функции
x = 10
def foo():
print(x) # 🔴 UnboundLocalError
x = 5
foo(){}
➡️ Python видит x = 5
и считает, что x
— локальная переменная. Но до присвоения её нет, поэтому ошибка.
🌍 Решение: объявить переменную глобальной
x = 10
def foo():
global x
print(x) # ✅ 10
x = 5
foo()
print(x) # 5{}
➡️ Теперь мы явно сказали: работаем с глобальной x
.
🔄 Ошибка №2: изменение замыкания без nonlocal
def outer():
x = 10
def inner():
x = x + 1 # 🔴 UnboundLocalError
return x
return inner()
outer(){}
➡️ Python считает, что x
в inner
— локальная, а к замыканию он не обращается.
🔧 Решение: использовать nonlocal
def outer():
x = 10
def inner():
nonlocal x
x = x + 1
return x
return inner()
print(outer()) # ✅ 11{}
➡️ nonlocal
говорит: используй переменную из внешней функции.
🧪 Практика: счётчик на замыканиях
def make_counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
counter = make_counter()
print(counter()) # 1
print(counter()) # 2{}
➡️ Без nonlocal
счётчик всегда бы начинался с нуля.
📦 Когда использовать global
и nonlocal
?
🟢 global — когда нужно изменять переменные уровня модуля (например, конфиг или кеш). 🟢 nonlocal — когда пишешь вложенные функции и нужно работать с переменными из внешней, а не создавать новые.⚠️ Подводный камень: не меняй глобальные без нужды
users = []
def add_user(name):
users.append(name) # ✅ работает без global{}
➡️ Мы меняем список, а не переназначаем переменную. Поэтому global
не нужен.
🗣️ Запомни: UnboundLocalError
= Python думает, что переменная локальная. Используй global
для изменения глобальных переменных, nonlocal
— для замыканий. Избегай глобалок: они делают код запутанным. Лучше возвращать значения и передавать их явно.1020
12:02
06.09.2025
🎲 Mutable vs Immutable: список в аргументах функции — неожиданный баг
В Python есть два типа объектов: immutable (строки, числа, кортежи) и mutable (списки, словари, множества).
Разница кажется очевидной, пока не сталкиваешься с функциями и дефолтными аргументами.
⚡️ Классический баг: изменяемый аргумент по умолчанию
def add_item(item, bucket=[]):
bucket.append(item)
return bucket
print(add_item("🍎")) # ['🍎']
print(add_item("🍌")) # ['🍎', '🍌'] ❌{}
➡️ Список создаётся один раз при определении функции. Все вызовы делят его между собой.
🔍 Почему так происходит?
Python вычисляет значения аргументов по умолчанию при определении функции, а не при каждом вызове. То есть bucket=[] создаётся один раз и живёт всё время жизни функции.✅ Как правильно: использовать
None
def add_item(item, bucket=None):
if bucket is None:
bucket = []
bucket.append(item)
return bucket
print(add_item("🍎")) # ['🍎']
print(add_item("🍌")) # ['🍌']{}
➡️ Теперь список создаётся каждый раз заново, если аргумент не передан.
🧪 Практика: словари ведут себя так же
def register_user(name, db={}):
db[name] = True
return db
print(register_user("Alice")) # {'Alice': True}
print(register_user("Bob")) # {'Alice': True, 'Bob': True} ❌{}
✔️ Исправляем через None
:
def register_user(name, db=None):
if db is None:
db = {}
db[name] = True
return db{}
📦 Когда это реально нужно?
Иногда специально используют «общий объект по умолчанию»:
def cache_query(query, cache={}):
if query in cache:
return cache[query]
result = f"Выполнил {query}"
cache[query] = result
return result{}
➡️ Все вызовы делят одно хранилище. Это работает как встроенный кеш.
🧠 Immutable так не ломаются
def add_one(x=0):
return x + 1
print(add_one()) # 1
print(add_one()) # 1{}
➡️ С числами, строками, кортежами проблем нет — они неизменяемые.
🗣 Запомни: Не используй изменяемые объекты в дефолтных аргументах. Безопасный паттерн: arg=None
, потом if arg is None: arg = []
. Исключение — если тебе нужен общий объект (например, кеш).988
17:29
08.09.2025
🔄 Генераторы и
yield
: как делать ленивые вычисления и экономить память
Обычные функции в Python возвращают всё сразу. Генераторы — по частям. Это «ленивые» вычисления: результат отдаётся только тогда, когда он нужен. Экономия памяти и скорость работы на больших данных становятся колоссальными.
⚡️ Простейший пример с yield
def numbers():
yield 1
yield 2
yield 3
for n in numbers():
print(n){}
➡️ Функция не возвращает список, а отдаёт значения по одному.
📂 Чтение больших файлов построчно
def read_file(path):
with open(path, "r") as f:
for line in f:
yield line.strip()
for line in read_file("big.log"):
print(line){}
➡️ Файл читается строчка за строчкой, без загрузки всего в память.
♾️ Бесконечные последовательности
def counter(start=0):
while True:
yield start
start += 1
for n in counter():
if n > 5:
break
print(n){}
➡️ Генератор может выдавать элементы бесконечно. Список так сделать нельзя.
🔗 Пайплайны генераторов
def numbers():
for i in range(10):
yield i
def squared(seq):
for x in seq:
yield x * x
for x in squared(numbers()):
print(x){}
➡️ Одни генераторы передают данные другим. Получается конвейер обработки.
🛠 Генераторные выражения
squares = (x*x for x in range(1_000_000))
print(next(squares)) # 1
print(next(squares)) # 4{}
➡️ Почти как list comprehension, но без хранения всех элементов в памяти.
🟢 Где это реально нужно:
🟢обработка логов и CSV гигабайтного размера; 🟢потоковые данные (сокеты, API); 🟢построение бесконечных последовательностей; 🟢конвейеры обработки (map/filter без лишних списков).🗣️ Запомни:
yield
отдаёт результат по частям, не занимая память. Генераторы можно объединять в цепочки — как трубы. Если данных много или они бесконечны — только генераторы спасут.572
19:37
11.09.2025
imageИзображение не доступно для предпросмотра
⚡️ Сотни курсов и книг по всем языкам программирования теперь доступны бесплатно:
🤩385 ГБ — Python
🤩229 ГБ — JS, HTML, CSS
🤩422 ГБ — C, C++, C#
🤩147 ГБ — Java, PHP
🤩202 ГБ — Rust, Golang
🤩352 ГБ — Flutter, Kotlin, Swift
🤩108 ГБ — ИИ, Machine Learning
🤩168 ГБ — DevOps, СисАдмин
🤩122 ГБ — Windows, Linux
🤩242 ГБ — БД (SQL и NoSQL)
🤩163 ГБ — QA-тестирование
🤩242 ГБ — ИБ, Хакинг
🤩189 ГБ — Разработка игр
🤩171 ГБ — Разработка ботов
🤩612 ГБ — Собеседования в IT
🤩3942 ГБ — Другие направления
База регулярно пополняется: Клик!
666
17:37
11.09.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
1 отзыва за 6 мес.
Превосходно (100%) За последние 6 мес
m
**rketing@****.academy
на сервисе с декабря 2024
02.04.202510:17
5
Оперативное размещение
Показать еще
Новинки в тематике
Лучшие в тематике
keyboard_double_arrow_left
shopping_cart
Каналов:
0
Подписчиков:
0
Просмотров:
lock_outline
Итого:
0.00₽
Перейти в корзину
Очистить корзину
Вы действительно хотите очистить корзину?
Вы снова сможете добавить каналы в корзину из каталога
Вы снова сможете добавить каналы в корзину из каталога
Очистить
Отменить
Комментарий