Библиотека собеса по Python | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по Python и ответы на них. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/6587aafa Для обратной связи: @proglibrary_feeedback_bot
Показати більше5 995
Підписники
+224 години
-47 днів
-1730 день
Архів дописів
Что такое и чем отличается old-style от new-style classes?
— Old-style классы наследуются непосредственно от объекта класса type. New-style классы наследуются от объекта класса object.
— New-style классы поддерживают дополнительные возможности, например descriptors, properties, slots. В old-style классах они не работают.
— В new-style классах метод init вызывается при наследовании, в отличие от old-style классов.
— New-style классы предпочтительны, так как полностью поддерживают особенности ООП. Большинство библиотек требуют именно их.
Рекомендуется использовать new-style классы, унаследованные от object. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.
Можно ли объявлять функцию внутри другой функции? Где она будет видна?
Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.
Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.
Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.
Напишите однострочник, который будет подсчитывать количество заглавных букв в файле
В этом однострочнике мы открываем файл ‘filename.txt’ и пробегаемся по всем его строкам и символам в каждой строке.
Для каждого символа, который является заглавной буквой метод isupper() возвращает True, и мы добавляем 1 к счетчику с помощью функции sum(). В конце, num_uppercase будет содержать количество заглавных букв в файле.
Напишите функцию на Python, которая принимает на вход список чисел и возвращает наибольшую возрастающую подпоследовательность (непоследовательные числа, идущие в порядке возрастания) из исходного списка
Для решения этой задачи используется динамическое программирование. Мы создаем массив dp, где dp[i] представляет собой длину наибольшей возрастающей подпоследовательности, заканчивающейся в nums[i]. Затем мы выполняем двойной цикл, чтобы найти наибольшую длину для каждого элемента. После этого мы определяем саму подпоследовательность, начиная с наибольшей длины и двигаясь обратно по массиву dp.
Пример использования:
python
nums = [3, 12, 5, 8, 10, 2, 1]
result = longest_increasing_subsequence(nums)
print(result) # Output: [3, 5, 8, 10]
Эта функция найдет наибольшую возрастающую подпоследовательность из списка [3, 12, 5, 8, 10, 2, 1], которой будет [3, 5, 8, 10], и выведет ее в консоль.
Что делает функция sample?
Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции.
Это удобно при необходимости получить случайную выборку из данных.
Функция принимает два основных аргумента:
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
k — количество элементов для выборки.
Дополнительные аргументы:
counts — список весов элементов (по умолчанию равновероятный выбор).
rng — генератор случайных чисел (по умолчанию берется из модуля random).
В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.
Вопросы и задачи для собеседований на какой грейд вам хотелось бы видеть чаще?
Что такое тернарный оператор?
Это способ выполнить условное выражение в одной строке кода. Подменяет собой привычную конструкцию if — else. Тернарный оператор можно использовать для присвоения значения переменной на основе какого-либо условия.
В примере на картинке max_value будет равно a, если a больше b, и b в противном случае. Выведет 10.
Что такое lambda-функция и как её применить?
Это анонимная функция, то есть у неё нет имени. Она может принимать неограниченное количество аргументов. Использование ключевого слова def при её написании не требуется. Также нет явного return. Lambda-функция часто применяется в тех местах, где требуется функция для единоразового использования. Её можно подавать в качестве аргумента для функций высшего порядка, таких как map(), filter(), и sorted().
Структура Lambda-функции — lambda arguments: expression
Что такое глубокая и поверхностная копии? Для чего они нужны?
⚫ Поверхностная копия создаёт новый объект, который содержит ссылки на внутренние объекты из оригинала. Если вы измените внутренние объекты оригинала, эти изменения отразятся и в поверхностной копии. Поверхностное копирование полезно, когда вы хотите создать новый экземпляр коллекции, но сохранить элементы коллекции неизменными. Это copy.copy(x).
⚫ Глубокая копия, напротив, создаёт новый объект и рекурсивно копирует все внутренние объекты, найденные в оригинале. В результате, внутренние объекты глубокой копии являются полностью независимыми от оригинальных объектов. Это полезно, когда нужно, чтобы исходный объект и его копия были полностью изолированы друг от друга. Это copy.deepcopy(x).
Стоит ли в функции Python делать значением аргумента по умолчанию список?
Использовать список или другие изменяемые типы данных в качестве значения аргумента по умолчанию считается плохой практикой. Дело в том, что аргументы по умолчанию инициализируются один раз при первом вызове функции. Если список будет изменён, то изменённое значение сохранится и будет использоваться при последующих вызовах функции. Это может привести к неожиданным результатам.
Как в Python реализованы private и protected методы?
Вместо строгой инкапсуляции Python использует соглашения по именованию для таких методов. То есть, если вы захотите, вы всё равно можете к ним обратиться.
Protected методы обозначаются одним подчёркиванием (_) перед именем. К ним следует обращаться только в текущем классе и во всех его дочерних классах.
Private методы обозначаются двойным подчёркиванием (__) перед именем. К ним следует обращаться только внутри класса. Но опять же, это не абсолютная защита, а скорее способ избежать случайного доступа к методу.
Какие типы коллекций есть в Python? Какие из них изменяемые, а какие неизменяемые?
🔹 Списки (List) — изменяемые коллекции, которые могут содержать элементы различных типов, упорядочены, поддерживают операции добавления и удаления элементов.
🔹 Кортежи (Tuple) — неизменяемые коллекции, которые также могут содержать элементы различных типов, упорядочены.
🔹 Строки (String) — неизменяемые коллекции. По сути, строка — это упорядоченная последовательность символов.
🔹 Множества (Set) — изменяемые коллекции, которые содержат уникальные элементы, не поддерживают индексацию и срезы.
🔹 Неизменяемые множества (Frozenset) — это те же множества, только неизменяемые.
🔹 Словари (Dictionary) — изменяемые коллекции пар ключ-значение, упорядочены начиная с Python 3.7.
Repost from Библиотека питониста | Python, Django, Flask
🐍💼 Подготовка к собеседованию по Python: решаем 5 интересных задач
Проверяем двоичные деревья на симметричность, вычисляем расстояние Дамерау-Левенштейна и оцениваем сложность алгоритмов.
Читать статью
Есть ли в Python сборщик мусора, и, если есть, как он работает?
Стандартный интерпретатор использует несколько алгоритмов.
🧹 Подсчёт ссылок. Каждый объект в Python содержит внутренний счётчик ссылок. Когда он падает до нуля, это означает, что на объект больше нет ссылок, его можно удалить. Главный недостаток этого алгоритма — не умеет определять циклические ссылки.
🧹 Алгоритм поиска циклов. Реализован в модуле gc и активируется время от времени, а не постоянно. Если коротко, этот алгоритм периодически ищет объекты, которые ссылаются только друг на друга и не доступны извне. Объекты, признанные недостижимыми, удаляются.
Также стоит добавить, что циклический сборщик мусора делит объекты на три поколения в зависимости от того, как долго они существуют в памяти. Новые объекты помещаются в первое поколение. Если они сохраняются после очередного процесса сбора мусора, то перемещаются в следующее по старшинству поколение. Объекты в более старших поколениях проверяются реже.
Как используется конструкция try — except? Какие ещё блоки для обработки исключений существуют?
try: Этот блок используется, чтобы обернуть код, который может вызвать исключение.
except: В этом блоке пишется код, который будет выполнен, если в блоке try возникнет исключение. Можно указать несколько блоков except.
else: Этот блок выполняется, если в блоке try не возникло исключений, то есть всё сработало без ошибок.
finally: Данный блок выполняется всегда после try, except и else, независимо от того, появилось исключение или нет (например, содержит инструкцию по закрытию файла).
Можно ли осуществить динамическую загрузку модуля в Python?
Чтобы загружать модули динамически, т.е. во время выполнения программы, используется функция
importlib.import_module()
В этом примере мы импортируем модуль importlib и используем его функцию import_module() для динамической загрузки модуля math. Затем мы используем функцию sqrt() из загруженного модуля.
Динамическая загрузка модуля может быть полезна, например, если вы хотите загрузить модуль в зависимости от каких-то условий, которые определяются во время выполнения программы. Такой подход — медленный, но он помогает эффективнее использовать память.Как и для чего используется %s?
%s — это Спецификатор формата и он используется для форматирования строк.
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.
%s заменяется на строковое представление переданного значения в процессе форматирования. Это удобный способ интерполяции строк.
Помимо простой интерполяции, %s полезен для оформления вывода данных в консоль, логгирования, составления SQL-запросов с подстановкой значений и других задач работы со строками.
Какой метод использовался до оператора in для проверки наличия ключа в словаре?
До появления оператора in в Python, чтобы проверить, содержит ли словарь определенный ключ, использовался метод словаря has_key().
Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.
В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.
Как изменить тип данных списка?
Для изменения типа данных в списке можно использовать встроенные функции:
1. map() — применяет указанную функцию к каждому элементу списка и возвращает новый список с измененными элементами:
old_list = [1, 2, 3]
new_list = map(str, old_list)
В новом списке все элементы будут строкового типа.
2. Использование генераторного выражения:
old_list = [1, 2, 3]
new_list = [str(x) for x in old_list]
Здесь мы преобразуем элементы в строку и помещаем в новый список.
Также можно применить конструкцию map к генераторному выражению:
new_list = list(map(str, [1, 2, 3]))
Как переименовать файл с помощью Python?
С помощью метода rename модуля os мы можем с легкостью изменить имя файла.
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
