es
Feedback
Python академия

Python академия

Ir al canal en Telegram

Учи Python быстро и легко. Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам. ✔ Подходит для прокачки навыков кодирования. По всем вопросам @evgenycarter

Mostrar más
7 189
Suscriptores
-124 horas
-97 días
-3630 días
Archivo de publicaciones
🛠 Передаем параметры красиво Частая ошибка новичков, склеивать параметры запроса вручную прямо в 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 Подписывайтесь на канал 👉@pythonofff

🌐 Твой первый 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 Подписывайтесь на канал 👉@pythonofff

☠️ Самая частая ошибка новичков в Python Посмотрите на этот код. Как думаете, что пошло не так? def add_item(item, basket=[])
☠️ Самая частая ошибка новичков в 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 Подписывайтесь на канал 👉@pythonofff

🧩 Задача: Проверка на анаграмму Анаграммы, это слова, состоящие из одних и тех же букв, но в разном порядке. Например: ток и
🧩 Задача: Проверка на анаграмму Анаграммы, это слова, состоящие из одних и тех же букв, но в разном порядке. Например: ток и кот. Как проверить, являются ли две строки анаграммами, максимально эффективно? Вариант 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 Подписывайтесь на канал 👉@pythonofff

🕵️‍♂️ Дебаг без боли: секрет 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 Подписывайтесь на канал 👉@pythonofff

🧠 List vs Set: Где искать быстрее? Представьте, у вас есть массив из 1 миллиона чисел, и нужно проверить, есть ли в нем числ
🧠 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 Подписывайтесь на канал 👉@pythonofff

⚡ Объединяем словари в Python 3.9+ Раньше для объединения двух словарей нам приходилось использовать метод .update() или расп
Объединяем словари в 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 Подписывайтесь на канал 👉@pythonofff

🐍 Ловушка с аргументами по умолчанию Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции? def append_to
🐍 Ловушка с аргументами по умолчанию Посмотрите на код ниже. Как вы думаете, что выведет второй вызов функции?

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 Подписывайтесь на канал 👉@pythonofff

Path().mkdir() Согласно официальной документации, метод .mkdir() принимает три аргумента. Мы пока сосредоточимся только на pa
Path().mkdir() Согласно официальной документации, метод .mkdir() принимает три аргумента. Мы пока сосредоточимся только на parents и exists_ok. Оба аргумента имеют значение False по умолчанию. Аргумент parents вызывает ошибку FileNotFound в случае отсутствия родителя, тогда как exists_ok вызывает ошибку FileExists, если данный каталог уже существует. 📲 Мы в MAX Подписывайтесь на канал 👉@pythonofff

Почему при зарплате 400к денег всё равно нет? Замечал, как люди с доходом 80к умудряются копить на отпуск и покупать айфоны? А у многих айтишников при 300-400к — в конце месяца ноль. Знакомо? Есть 5 конкретных причин, почему так происходит при высоком доходе. Снял видео — разбираю каждую. 5 минут, без воды. Посмотри, возможно узнаешь себя или коллег! Смотреть #реклама 16+ sbsite.pro О рекламодателе

Проверяем тип объекта Раз уж в предыдущем посте затронули модуль inspect, то давайте еще поговорим про некоторые его возможно
Проверяем тип объекта Раз уж в предыдущем посте затронули модуль inspect, то давайте еще поговорим про некоторые его возможности. Функции ismodule(), isclass(), ismethod() и isfunction() проверяют переданный объект на то, является ли он модулем, классом, методом или функцией соответственно. 📲 Мы в MAX Подписывайтесь на канал 👉@pythonofff

Свойства Concrete Paths Поскольку Concrete Paths является подклассом PurePath, мы можем использовать все свойства PurePath().
Свойства Concrete Paths Поскольку Concrete Paths является подклассом PurePath, мы можем использовать все свойства PurePath(). Это означает, что мы можем использовать, например, свойство .with_suffix для добавления суффикса к конкретному пути. Подписывайтесь на канал 👉@pythonofff

Продвижение в Telegram с помощью Яндекс Директа ⚡Запустите продвижение в телеграм-каналах и привлекайте целевую аудиторию 📱
+3
Продвижение в Telegram с помощью Яндекс Директа ⚡Запустите продвижение в телеграм-каналах и привлекайте целевую аудиторию 📱 Таргетинг по тематикам, регионам и каналам в Telegram Попробовать #реклама yandex.ru О рекламодателе

Получаем исходный код объекта Встроенный модуль inspect помогает разработчикам исследовать уже написанные программы. Сегодня
Получаем исходный код объекта Встроенный модуль inspect помогает разработчикам исследовать уже написанные программы. Сегодня поговорим только про getsource(), который возвращает весь исходный код функции, класса или модуля в виде строки. В аргументы достаточно передать необходимый объект. Но важно отметить, что встроенные функции не получится проинспектировать. 📲 Мы в MAX Подписывайтесь на канал 👉@pythonofff

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

Генерация капчи Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль captcha и Pillow, который использ
Генерация капчи Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль captcha и Pillow, который используется для создание изображений в captcha. Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения ImageCaptcha, на который будет нанесен текст. После чего вызываем метод write с заданным текстом и именем файла, в который будет записано изображение. 📲 Мы в MAX Подписывайтесь на канал 👉@pythonofff

Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 На
Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 Начните прямо сейчас ⚡ Зарегистрироваться #реклама direct.yandex.ru О рекламодателе

PosixPath() Это дочерний класс Path() и PurePosixPath(), реализованный для обработки и управления путями файловой системы, от
PosixPath() Это дочерний класс Path() и PurePosixPath(), реализованный для обработки и управления путями файловой системы, отличной от Windows. Вы получите сообщение об ошибке, если создадите экземпляр PosixPath() на компьютере с Windows, потому что нельзя выполнять системные вызовы, работая в другой операционной системе. 📲 Мы в MAX Подписывайтесь на канал 👉@pythonofff

Курс по дизайну от ТОП3 дизайн студии с наставником Забирай бесплатно 🎓 6 кейсов в Figma с нуля: граф,веб,UX/UI дизайн 📊 Го
Курс по дизайну от ТОП3 дизайн студии с наставником Забирай бесплатно 🎓 6 кейсов в Figma с нуля: граф,веб,UX/UI дизайн 📊 Готовое Reels Портфолио: сайты, карточки МП, баннеры, презентации 💰 Алгоритм заработка на дизайне: без фриланс-бирж и продаж ✨ В конце: розыгрыш AirPods Попробовать #реклама 16+ study.logomachine.ru О рекламодателе

Получение списка имен в объектах С помощью функции dir() можно получить отсортированный список имен атрибутов и методов, дост
Получение списка имен в объектах С помощью функции dir() можно получить отсортированный список имен атрибутов и методов, доступных в локальной области. Либо если в функцию передать какой-либо объект dir(object), она вернет список всех имен атрибутов и методов переданного объекта. Для того, чтобы вручную определить для класса выдачу информации по атрибутам для функции dir(), можно определить в классе метод __dir__(). Для классов, в которых не определен __dir__(), функция соберет информацию по атрибутам из __dict__. Данную функцию удобно использовать в интерактивном режиме для поиска нужного атрибута, применяя функцию help() по нужному атрибуту для получения документации. Подписывайтесь на канал 👉@pythonofff