Python академия
Kanalga Telegram’da o‘tish
Учи Python быстро и легко. Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам. ✔ Подходит для прокачки навыков кодирования. По всем вопросам @evgenycarter
Ko'proq ko'rsatish7 189
Obunachilar
-124 soatlar
-97 kunlar
-3630 kunlar
Postlar arxiv
7 189
🛠 Передаем параметры красиво
Частая ошибка новичков, склеивать параметры запроса вручную прямо в URL.
❌ Как НЕ надо делать:
user_id = 12
# Плохо: сложно читать, легко ошибиться, проблемы со спецсимволами
url = "https://jsonplaceholder.typicode.com/posts?userId=" + str(user_id)
r = requests.get(url)
✅ Как НАДО делать:
Используйте аргумент params. Библиотека сама всё склеит и, что важно, правильно закодирует символы (например, заменит пробелы на %20).
import requests
url = "https://jsonplaceholder.typicode.com/posts"
# Параметры кладем в словарь
my_params = {
"userId": 1,
"_limit": 5
}
# Передаем словарь в функцию
response = requests.get(url, params=my_params)
print(response.url)
# Вывод: .../posts?userId=1&_limit=5
Это делает код чище, безопаснее и профессиональнее. 😎
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
🌐 Твой первый API запрос на Python
Если нужно получить данные с сайта (курс валют, погоду или список постов), библиотека
requests - твой лучший друг. Она делает общение с интернетом невероятно простым.
Допустим, мы хотим получить шутку с бесплатного API.
Как это сделать в 3 строчки:
import requests
# 1. Делаем GET-запрос по адресу
url = "https://official-joke-api.appspot.com/random_joke"
response = requests.get(url)
# 2. Проверяем, что всё ок (код 200)
if response.status_code == 200:
# 3. Превращаем ответ из JSON в словарь Python
data = response.json()
print(f"Шутка: {data['setup']} - {data['punchline']}")
else:
print("Ошибка соединения 😢")
📌 Разбор:
🟢.status_code - показывает, как прошел запрос (200 = ОК, 404 = Не найдено, 500 = Ошибка сервера).
🟢.json() - это магия, которая превращает строку текста от сервера сразу в понятный Python-словарь.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
☠️ Самая частая ошибка новичков в Python
Посмотрите на этот код. Как думаете, что пошло не так?
def add_item(item, basket=[]):
basket.append(item)
return basket
print(add_item("Яблоко"))
print(add_item("Банан"))
Ожидание:
['Яблоко']
['Банан']
Реальность:
['Яблоко']
['Яблоко', 'Банан'] 😱
Почему так произошло?
В Python аргументы по умолчанию создаются один раз при запуске программы (когда интерпретатор читает def), а не при каждом вызове функции. Поэтому список basket - это один и тот же объект в памяти для всех вызовов!
✅ Как писать правильно:
Используйте None как маркер пустого значения.
def add_item(item, basket=None):
if basket is None:
basket = []
basket.append(item)
return basket
Сохраняй пост, чтобы не наступать на эти грабли! 💾
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
🧩 Задача: Проверка на анаграмму
Анаграммы, это слова, состоящие из одних и тех же букв, но в разном порядке. Например:
ток и кот.
Как проверить, являются ли две строки анаграммами, максимально эффективно?
Вариант 1 (В лоб): Сортировка
Мы можем отсортировать обе строки и сравнить их.
def is_anagram(s1, s2):
return sorted(s1) == sorted(s2)
Это работает, но сложность сортировки - O(N log N) . Можно ли быстрее? 🤔
Вариант 2 (Оптимальный): Подсчет символов
Используем словарь (или Counter), чтобы посчитать, сколько раз встречается каждая буква. Сложность такого решения - O(N) , то есть линейная (самая быстрая).
from collections import Counter
def is_anagram_fast(s1, s2):
return Counter(s1) == Counter(s2)
print(is_anagram_fast("listen", "silent")) # True
💡 Совет: На собеседованиях всегда предлагайте сначала решение с сортировкой (оно проще), а потом удивляйте интервьюера знанием сложности алгоритмов и вариантом с хеш-таблицей (Counter)!
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
🕵️♂️ Дебаг без боли: секрет f-строк
Признавайтесь, вы тоже часто пишете такие принты, чтобы проверить значение переменной?
name = "Alex"
age = 25
print("name =", name)
print("age =", age)
Это работает, но писать каждый раз название переменной в кавычках — долго и лениво. В Python есть супер-фишка для f-строк, о которой многие забывают. Просто добавьте знак равно = после имени переменной внутри фигурных скобок!
Как это выглядит:
name = "Alex"
age = 25
print(f"{name=}")
print(f"{age=}")
Вывод:
name='Alex'
age=25
🔥 Почему это круто: Python сам подставляет имя переменной и её значение. Экономит кучу времени при поиске багов!
Знали про этот трюк? Ставьте ❤️, если уже пользуетесь!
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
🧠 List vs Set: Где искать быстрее?
Представьте, у вас есть массив из 1 миллиона чисел, и нужно проверить, есть ли в нем число 999999.
Что использовать: список (
list) или множество (set)?
Сравнение сложности:
▪️ List (in operator): Сложность . Python перебирает элементы по одному, пока не найдет нужное. Если список огромный, это долго.
▪️ Set (in operator): Сложность (в среднем). Множества реализованы как хеш-таблицы. Python вычисляет хеш числа и сразу "прыгает" в нужную ячейку памяти.
Тест скорости:
import time
data_list = list(range(10_000_000))
data_set = set(data_list)
# Поиск в списке
start = time.time()
print(9999999 in data_list)
print(f"List time: {time.time() - start:.5f} sec")
# Поиск в множестве
start = time.time()
print(9999999 in data_set)
print(f"Set time: {time.time() - start:.5f} sec")
🚀 Итог: Если вам нужно часто проверять наличие элемента в большой коллекции - всегда конвертируйте её в set.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
⚡ Объединяем словари в Python 3.9+
Раньше для объединения двух словарей нам приходилось использовать метод
.update() или распаковку **kwargs.
Начиная с Python 3.9, появился оператор объединения |. Это делает код намного чище!
Пример:
x = {"key1": "value1 from x", "key2": "value2 from x"}
y = {"key2": "value2 from y", "key3": "value3 from y"}
# Старый способ (до 3.9)
z = {**x, **y}
# Новый способ (Python 3.9+)
z = x | y
print(z)
# {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
💡При совпадении ключей (в примере key2), побеждает значение из последнего словаря (справа от оператора).
Сохраняй, чтобы писать чистый код! 💾
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
🐍 Ловушка с аргументами по умолчанию
Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции?
def append_to(num, target=[]):
target.append(num)
return target
print(append_to(1))
print(append_to(2))
Варианты ответа:
1. [1] и [2]
2. [1] и [1, 2]
3. Ошибка SyntaxError
⬇️ Правильный ответ и объяснение ⬇️
Правильный ответ: 2 — [1] и [1, 2]
Почему?
В Python аргументы по умолчанию вычисляются один раз при определении функции, а не при каждом вызове. Список target создается один раз и сохраняет свое состояние между вызовами.
✅ Как исправить?
Используйте None в качестве значения по умолчанию:
def append_to(num, target=None):
if target is None:
target = []
target.append(num)
return target
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff7 189
Path().mkdir()
Согласно официальной документации, метод .mkdir() принимает три аргумента. Мы пока сосредоточимся только на parents и exists_ok.
Оба аргумента имеют значение False по умолчанию. Аргумент parents вызывает ошибку FileNotFound в случае отсутствия родителя, тогда как exists_ok вызывает ошибку FileExists, если данный каталог уже существует.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
7 189
Почему при зарплате 400к денег всё равно нет?
Замечал, как люди с доходом 80к умудряются копить на отпуск и покупать айфоны?
А у многих айтишников при 300-400к — в конце месяца ноль. Знакомо?
Есть 5 конкретных причин, почему так происходит при высоком доходе.
Снял видео — разбираю каждую. 5 минут, без воды.
Посмотри, возможно узнаешь себя или коллег!
Смотреть
#реклама 16+
sbsite.pro
О рекламодателе
7 189
Проверяем тип объекта
Раз уж в предыдущем посте затронули модуль inspect, то давайте еще поговорим про некоторые его возможности.
Функции ismodule(), isclass(), ismethod() и isfunction() проверяют переданный объект на то, является ли он модулем, классом, методом или функцией соответственно.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
7 189
Свойства Concrete Paths
Поскольку Concrete Paths является подклассом PurePath, мы можем использовать все свойства PurePath().
Это означает, что мы можем использовать, например, свойство .with_suffix для добавления суффикса к конкретному пути.
Подписывайтесь на канал 👉@pythonofff
7 189
+3
Продвижение в Telegram с помощью Яндекс Директа
⚡Запустите продвижение в телеграм-каналах и привлекайте целевую аудиторию
📱 Таргетинг по тематикам, регионам и каналам в Telegram
Попробовать
#реклама
yandex.ru
О рекламодателе
7 189
Получаем исходный код объекта
Встроенный модуль inspect помогает разработчикам исследовать уже написанные программы.
Сегодня поговорим только про getsource(), который возвращает весь исходный код функции, класса или модуля в виде строки.
В аргументы достаточно передать необходимый объект. Но важно отметить, что встроенные функции не получится проинспектировать.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
7 189
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
7 189
Генерация капчи
Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль captcha и Pillow, который используется для создание изображений в captcha.
Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения ImageCaptcha, на который будет нанесен текст. После чего вызываем метод write с заданным текстом и именем файла, в который будет записано изображение.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
7 189
Реклама для бизнеса любого уровня в Яндекс Директе
Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌
Начните прямо сейчас ⚡
Зарегистрироваться
#реклама
direct.yandex.ru
О рекламодателе
7 189
PosixPath()
Это дочерний класс Path() и PurePosixPath(), реализованный для обработки и управления путями файловой системы, отличной от Windows.
Вы получите сообщение об ошибке, если создадите экземпляр PosixPath() на компьютере с Windows, потому что нельзя выполнять системные вызовы, работая в другой операционной системе.
📲 Мы в MAX
Подписывайтесь на канал 👉@pythonofff
7 189
Курс по дизайну от ТОП3 дизайн студии с наставником
Забирай бесплатно
🎓 6 кейсов в Figma с нуля: граф,веб,UX/UI дизайн
📊 Готовое Reels Портфолио: сайты, карточки МП, баннеры, презентации
💰 Алгоритм заработка на дизайне: без фриланс-бирж и продаж
✨ В конце: розыгрыш AirPods
Попробовать
#реклама 16+
study.logomachine.ru
О рекламодателе
7 189
Получение списка имен в объектах
С помощью функции dir() можно получить отсортированный список имен атрибутов и методов, доступных в локальной области. Либо если в функцию передать какой-либо объект dir(object), она вернет список всех имен атрибутов и методов переданного объекта.
Для того, чтобы вручную определить для класса выдачу информации по атрибутам для функции dir(), можно определить в классе метод __dir__().
Для классов, в которых не определен __dir__(), функция соберет информацию по атрибутам из __dict__.
Данную функцию удобно использовать в интерактивном режиме для поиска нужного атрибута, применяя функцию help() по нужному атрибуту для получения документации.
Подписывайтесь на канал 👉@pythonofff
