👍1👎1🥰1
✅ Правильный ответ: Ошибка — UnboundLocalError
🧠 Почему так?
🔷Внутри foo() есть присваивание x = 5
🔷Python считает x локальной переменной во всей функции
🔷Но print(x) идёт до присваивания
🔷В итоге: обращение к локальной переменной до её создания -> ошибка
Как исправить, если нужен внешний x:
Или лучше так:
🔹 Вывод:
👉 Если в функции есть присваивание — переменная становится локальной, даже если она объявлена снаружи.
🐍Вопросы с собесов -> ProstoPython
🧠 Почему так?
🔷Внутри foo() есть присваивание x = 5
🔷Python считает x локальной переменной во всей функции
🔷Но print(x) идёт до присваивания
🔷В итоге: обращение к локальной переменной до её создания -> ошибка
Как исправить, если нужен внешний x:
def foo():
global x
print(x)
x = 5
Или лучше так:
def foo(x):
print(x)
x = 5
🔹 Вывод:
👉 Если в функции есть присваивание — переменная становится локальной, даже если она объявлена снаружи.
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥5⚡1🥰1😁1
🧰 Code Cleanup — выпуск 21
Тема: лишний else после return
Если функция уже что-то вернула — else чаще всего не нужен.
❌ Плохо:
Код работает, но else здесь — просто шум.
✅ Code Cleanup:
🧠 Почему так лучше:
🔹 меньше строк — быстрее читается
🔹 нет лишней вложенности
🔹 проще логика
🐍Вопросы с собесов -> ProstoPython
Тема: лишний else после return
Если функция уже что-то вернула — else чаще всего не нужен.
❌ Плохо:
def is_even(n):
if n % 2 == 0:
return True
else:
return False
Код работает, но else здесь — просто шум.
✅ Code Cleanup:
def is_even(n):
return n % 2 == 0
🧠 Почему так лучше:
🔹 меньше строк — быстрее читается
🔹 нет лишней вложенности
🔹 проще логика
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍3❤1
Асинхронность работает быстрее, потому что не блокирует выполнение программы во время ожидания медленных операций.
🔹 пока одна задача ждёт I/O (сеть, БД, файлы), выполняются другие
🔹 процессор не простаивает
🔹 можно обслуживать много задач одним потоком
Итог: ресурсы используются эффективнее, особенно в I/O-нагруженных приложениях.
🐍Вопросы с собесов -> ProstoPython
🔹 пока одна задача ждёт I/O (сеть, БД, файлы), выполняются другие
🔹 процессор не простаивает
🔹 можно обслуживать много задач одним потоком
Итог: ресурсы используются эффективнее, особенно в I/O-нагруженных приложениях.
🐍Вопросы с собесов -> ProstoPython
🔥4
❌ Rookie Mistakes 2— ловушка or при значениях по умолчанию
Очень популярная ошибка у новичков.
❌ Плохо:
Ожидаешь 0, а получаешь 10 😬
✅ Хорошо:
🧠 Почему так происходит:
or возвращает первое truthy значение
0, '', [] — это False
Python думает, что значения «нет», хотя оно есть
🐍Вопросы с собесов -> ProstoPython
Очень популярная ошибка у новичков.
❌ Плохо:
def get_limit(limit):
return limit or 10
print(get_limit(0))
Ожидаешь 0, а получаешь 10 😬
✅ Хорошо:
def get_limit(limit):
if limit is None:
return 10
return limit
🧠 Почему так происходит:
or возвращает первое truthy значение
0, '', [] — это False
Python думает, что значения «нет», хотя оно есть
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥4
🧰 Code Cleanup — выпуск 22
Тема: не усложняй if, когда можно проще
Иногда условия пишут слишком подробно, хотя Python умеет короче.
❌ Плохо:
Работает, но сравнение с True здесь лишнее.
✅ Code Cleanup:
🧠 Почему так лучше:
🔹 код короче и чище
🔹 сразу читается логика
🔹 меньше лишних сравнений
🐍Вопросы с собесов -> ProstoPython
Тема: не усложняй if, когда можно проще
Иногда условия пишут слишком подробно, хотя Python умеет короче.
❌ Плохо:
if is_active == True:
send_email()
Работает, но сравнение с True здесь лишнее.
✅ Code Cleanup:
if is_active:
send_email()
🧠 Почему так лучше:
🔹 код короче и чище
🔹 сразу читается логика
🔹 меньше лишних сравнений
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥4
❌ Rookie Mistakes #3 — забыли return
Код выглядит нормально.
Но функция делает не то, что ожидаешь 😬
❌ Плохо:
Ожидаешь 90, а получаешь None.
✅ Хорошо:
🧠 Почему так происходит:
🔹Если в функции нет return — Python возвращает None
🔹Выражение само по себе ничего не возвращает
🔹Ошибка не всегда заметна сразу
🐍Вопросы с собесов -> ProstoPython
Код выглядит нормально.
Но функция делает не то, что ожидаешь 😬
❌ Плохо:
def calc_discount(price):
price * 0.9
result = calc_discount(100)
print(result)
Ожидаешь 90, а получаешь None.
✅ Хорошо:
def calc_discount(price):
return price * 0.9
🧠 Почему так происходит:
🔹Если в функции нет return — Python возвращает None
🔹Выражение само по себе ничего не возвращает
🔹Ошибка не всегда заметна сразу
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
Git rebase нужен для переноса коммитов одной ветки поверх другой.
🔹 делает историю линейной и более чистой
🔹 убирает лишние merge-коммиты
🔹 позволяет «переиграть» изменения поверх актуальной версии ветки
Используется для упорядочивания истории перед слиянием.
🐍Вопросы с собесов -> ProstoPython
🔹 делает историю линейной и более чистой
🔹 убирает лишние merge-коммиты
🔹 позволяет «переиграть» изменения поверх актуальной версии ветки
Используется для упорядочивания истории перед слиянием.
🐍Вопросы с собесов -> ProstoPython
🔥4
❌ Rookie Mistakes #9 — путаница между sort() и sorted()
❌ Плохо:
Ожидаешь [1, 2, 3],
а получаешь None.
✅ Хорошо:
🧠 Почему так происходит:
🔹list.sort() сортирует список на месте и возвращает None
🔹sorted() создаёт новый отсортированный список
🔹Многие путают их из-за похожих названий
🐍Вопросы с собесов -> ProstoPython
❌ Плохо:
numbers = [3, 1, 2]
sorted_numbers = numbers.sort()
print(sorted_numbers)
Ожидаешь [1, 2, 3],
а получаешь None.
✅ Хорошо:
numbers = [3, 1, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
🧠 Почему так происходит:
🔹list.sort() сортирует список на месте и возвращает None
🔹sorted() создаёт новый отсортированный список
🔹Многие путают их из-за похожих названий
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍3
GET
🔹 запрашивает данные
🔹 возвращает тело ответа
🔹 используется для получения ресурсов
POST
🔹 отправляет данные на сервер
🔹 создаёт или изменяет ресурс
🔹 передаёт данные в теле запроса
HEAD
🔹 работает как GET, но
🔹 возвращает только заголовки без тела ответа
🐍Вопросы с собесов -> ProstoPython
🔹 запрашивает данные
🔹 возвращает тело ответа
🔹 используется для получения ресурсов
POST
🔹 отправляет данные на сервер
🔹 создаёт или изменяет ресурс
🔹 передаёт данные в теле запроса
HEAD
🔹 работает как GET, но
🔹 возвращает только заголовки без тела ответа
🐍Вопросы с собесов -> ProstoPython
🔥4
🧰 Code Cleanup — выпуск 23
Тема: не проверяй ключ через in, если сразу берёшь значение
❌ Плохо:
Работает.
Но код раздут и делает лишнюю проверку.
✅ Code Cleanup:
🧠 Почему так лучше:
🔹 короче и чище
🔹 нет двойного обращения к словарю
🔹 меньше ветвлений
🐍Вопросы с собесов -> ProstoPython
Тема: не проверяй ключ через in, если сразу берёшь значение
❌ Плохо:
if "name" in user:
value = user["name"]
else:
value = "Unknown"
Работает.
Но код раздут и делает лишнюю проверку.
✅ Code Cleanup:
value = user.get("name", "Unknown")🧠 Почему так лучше:
🔹 короче и чище
🔹 нет двойного обращения к словарю
🔹 меньше ветвлений
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥4❤1
Новая рубрика - ⏱️ Big O Breakdown
Краткое описание рубрики
Разбираем фрагмент кода и определяем его временную сложность.
Учимся быстро считать O-нотацию без паники и лишней теории.
Именно такие вопросы любят задавать на собеседованиях по Python.
🐍Вопросы с собесов -> ProstoPython
Краткое описание рубрики
Разбираем фрагмент кода и определяем его временную сложность.
Учимся быстро считать O-нотацию без паники и лишней теории.
Именно такие вопросы любят задавать на собеседованиях по Python.
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥1
⏱️ Big O Breakdown — выпуск 1
Смотри на код и попробуй определить сложность 👇
❓ Какая сложность?
A) O(n)
B) O(n log n)
C) O(n²)
D) O(1)
✅ Правильный ответ:C) O(n²)
🧠 Почему так:
Первый цикл проходит n раз
Внутри него второй цикл тоже n раз
n * n = n²
Каждый элемент перебирается для каждого элемента.
🐍Вопросы с собесов -> ProstoPython
Смотри на код и попробуй определить сложность 👇
def count_pairs(nums):
count = 0
for i in range(len(nums)):
for j in range(len(nums)):
count += 1
return count
❓ Какая сложность?
A) O(n)
B) O(n log n)
C) O(n²)
D) O(1)
✅ Правильный ответ:
🧠 Почему так:
Внутри него второй цикл тоже n раз
n * n = n²
Каждый элемент перебирается для каждого элемента.
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍5
Попробуйте ответить без запуска, что выведет код, разбор будет через 2 часа
🐍Вопросы с собесов -> ProstoPython
🐍Вопросы с собесов -> ProstoPython
Что выведет код выше?
Anonymous Poll
26%
(1, 2, 3, 4) (1, 2, 3, 4)
31%
(1, 2, 3, 4) (1, 2, 3)
11%
(1, 2, 3) (1, 2, 3, 4)
31%
Ошибка
✅ Правильный ответ: B (1,2,3,4) (1,2,3)
🧠 Почему так:
🔷Кортежи неизменяемые
🔷a += (4,) создаёт новый кортеж
🔷Переменная a начинает ссылаться на новый объект
🔷b всё ещё указывает на старый (1, 2, 3)
🐍Вопросы с собесов -> ProstoPython
🧠 Почему так:
🔷Кортежи неизменяемые
🔷a += (4,) создаёт новый кортеж
🔷Переменная a начинает ссылаться на новый объект
🔷b всё ещё указывает на старый (1, 2, 3)
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍6
🔹 Hash map — структура данных для хранения key -> value с доступом за O(1) в среднем.
🔹 Механика работы:
1️⃣ hash(key) -> получаем число
2️⃣ index = hash % capacity -> индекс в массиве
3️⃣ По индексу хранится значение
🔹 Коллизия — разные ключи дают один индекс.
Решается через:
chaining (список в ячейке)
open addressing (поиск свободной ячейки, как в Python dict)
🔹 Сложность:
O(1) в среднем, O(n) в худшем случае.
🔹 Ключ должен быть неизменяемым и корректно реализовывать hash и eq.
🐍Вопросы с собесов -> ProstoPython
🔹 Механика работы:
1️⃣ hash(key) -> получаем число
2️⃣ index = hash % capacity -> индекс в массиве
3️⃣ По индексу хранится значение
🔹 Коллизия — разные ключи дают один индекс.
Решается через:
chaining (список в ячейке)
open addressing (поиск свободной ячейки, как в Python dict)
🔹 Сложность:
O(1) в среднем, O(n) в худшем случае.
🔹 Ключ должен быть неизменяемым и корректно реализовывать hash и eq.
🐍Вопросы с собесов -> ProstoPython
👍3
🧰 Code Cleanup — выпуск 23
Тема: не дублируй вычисление в условии
Иногда одно и то же выражение считают дважды.
❌ Плохо:
Работает.
Но функция вызывается два раза.
✅ Code Cleanup:
🧠 Почему так лучше:
🔹 нет повторного вызова функции
🔹 быстрее и безопаснее
🔹 код читается проще
🔹 меньше скрытых багов, если функция тяжёлая
🐍Вопросы с собесов -> ProstoPython
Тема: не дублируй вычисление в условии
Иногда одно и то же выражение считают дважды.
❌ Плохо:
if len(get_users()) > 0:
print(len(get_users()))
Работает.
Но функция вызывается два раза.
✅ Code Cleanup:
users = get_users()
if users:
print(len(users))
🧠 Почему так лучше:
🔹 нет повторного вызова функции
🔹 быстрее и безопаснее
🔹 код читается проще
🔹 меньше скрытых багов, если функция тяжёлая
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
🔥4
⏱️ Big O Breakdown — выпуск 2
Смотри внимательно.
❓ Какая сложность?
A) O(n)
B) O(log n)
C) O(n²)
D) O(1)
✅ Правильный ответ:B) O(log n)
🧠 Почему так:
i удваивается на каждой итерации
1 —> 2 —> 4 —> 8 —> 16 —> ...
Количество шагов примерно log₂(n)
Это не линейный рост, а логарифмический
🐍Вопросы с собесов -> ProstoPython
Смотри внимательно.
def process(nums):
n = len(nums)
i = 0
while i < n:
print(nums[i])
i *= 2
if i == 0:
i = 1
❓ Какая сложность?
A) O(n)
B) O(log n)
C) O(n²)
D) O(1)
✅ Правильный ответ:
🧠 Почему так:
i удваивается на каждой итерации
1 —> 2 —> 4 —> 8 —> 16 —> ...
Количество шагов примерно log₂(n)
Это не линейный рост, а логарифмический
🐍Вопросы с собесов -> ProstoPython
Telegram
Prosto Python | вопросы с собесов
🚀 Python-собесы без сюрпризов! Разбираем реальные вопросы, ошибки кандидатов и лайфхаки, которые помогают пройти интервью. Джун → мидл → сеньор — прокачивайся и разнеси следующий собес! 🔥
👍4
Не запускай.
Подумай, как работает цикл и функции внутри него 👀
Разбор будет через два часа🔥
🐍Вопросы с собесов -> ProstoPython
Подумай, как работает цикл и функции внутри него 👀
Разбор будет через два часа🔥
🐍Вопросы с собесов -> ProstoPython