Материалы для собеседования: Python скрининг
Цель: Проверить базовые знания Python, понимание ООП и способность решать простые алгоритмические задачи
Целевая аудитория: Junior/Middle Python разработчики
Дата подготовки: 03.12.2025
Структура собеседования (60 минут)
Введение и знакомство
Базовые теоретические вопросы
ООП и функции
Практическая задача
Вопросы кандидата
Базовые понятия Python (5 ключевых вопросов)
Типы данных в Python
# Список (list) - изменяемый, упорядоченный
my_list = [1, 2, 3]
my_list.append(4) # Можно изменить
# Кортеж (tuple) - неизменяемый, упорядоченный
my_tuple = (1, 2, 3)
# my_tuple[0] = 4 # Ошибка! Нельзя изменить
# Множество (set) - изменяемый, неупорядоченный, уникальные элементы
my_set = {1, 2, 3, 3} # {1, 2, 3}
# Словарь (dict) - изменяемый, неупорядоченный (Python 3.7+ сохраняет порядок)
my_dict = {'a': 1, 'b': 2}
ООП в Python (5 ключевых вопросов)
Функции и области видимости
# Пример простого декоратора
def my_decorator(func):
def wrapper():
print("До вызова функции")
func()
print("После вызова функции")
return wrapper
@my_decorator
def say_hello():
print("Привет!") say_hello()
Пример задачи: Палиндром
def is_palindrome(s):
# Убираем пробелы и приводим к нижнему регистру
s = s.replace(" ", "").lower()
# Сравниваем строку с её перевернутой версией
return s == s[::-1]
# Примеры использования
print(is_palindrome("А роза упала на лапу Азора")) # True print(is_palindrome("Python")) # False
print(is_palindrome("racecar")) # True
- Обработка регистра и пробелов
- Эффективность решения
- Тестовые случаи (пустая строка, один символ)
Пример задачи: FizzBuzz
def fizzbuzz(n=100):
for i in range(1, n+1):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
# Альтернативное решение
def fizzbuzz_alt(n=100):
for i in range(1, n+1):
output = ""
if i % 3 == 0:
output += "Fizz"
if i % 5 == 0:
output += "Buzz"
print(output or i)
- Порядок условий (важно проверять "FizzBuzz" первым)
- Читаемость кода
- Возможные оптимизации
Критерии оценки кандидата
Типы данных, операторы, циклы, условия
Классы, наследование, полиморфизм, инкапсуляция
Логическое мышление, подход к решению
Способность объяснить свои решения
Именование переменных, структура кода, комментарии
Обработка edge cases, отладка
Ресурсы для подготовки
ТОП вопросов по Python
Задачи для собеседования
Вопросы на GitHub
LeetCode
HackerRank Python
Дополнительные материалы:
- Рекомендуемая литература: "Python. Карманный справочник" М. Лутц
- Видео: "Собеседование Python. Разбор вопросов" (YouTube)
Дополнительный материал
Вопросы учеников к ИИ-помощнику и ответы по теме урока
Отлично, давай разберем правило LEGB подробнее. Это фундаментальный механизм, который определяет, как Python ищет значение переменной, когда ты на нее ссылаешься.
Основная мысль: LEGB — это порядок (scope), в котором Python ищет переменные: сначала в локальной области видимости, затем во внешних функциях, потом в глобальной и, наконец, во встроенных именах. Это предотвращает конфликты и позволяет управлять доступом к данным.
Ключевые пункты:
-
L — Local (Локальная):
- Область внутри функции (или метода, или lambda-выражения).
- Python сначала проверяет, не объявлена ли переменная здесь.
- Пример: Переменные, созданные внутри функции с помощью
=или как параметры.
-
E — Enclosing (Охватывающая / nonlocal):
- Область видимости внешних функций, если мы имеем дело с вложенными функциями.
- Ищет переменные в объемлющих (enclosing) функциях, начиная с ближайшей.
- Пример: Полезно для замыканий (closures).
-
G — Global (Глобальная):
- Область видимости на уровне модуля (файла с кодом).
- Сюда попадают переменные, объявленные вне всех функций.
- Чтобы изменить глобальную переменную внутри функции, нужно использовать ключевое слово
global.
-
B — Built-in (Встроенная):
- Самый верхний уровень. Сюда входят встроенные функции и исключения Python (
print,len,list,ValueErrorи т.д.). - Python обращается сюда, если не нашел имя во всех предыдущих областях.
- Самый верхний уровень. Сюда входят встроенные функции и исключения Python (
Пример для наглядности:
```python
x = "глобальная" # G - Global
def outer():
x = "охватывающая" # E - Enclosing (для функции inner)
def inner():
x = "локальная" # L - Local
print(x) # Выведет "локальная" (нашло в L)
inner()
print(x) # Выведет "охватывающая" (нашло в E для outer)
outer()
print(x) # Выведет "глобальная" (нашло в G)
print(len([1,2,3])) # 'len' найден в B -