Библиотека собеса по Python | вопросы с собеседований
6.16K subscribers
602 photos
9 videos
297 links
Вопросы с собеседований по Python и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/6587aafa

Для обратной связи: @proglibrary_feeedback_bot
加入频道
Что такое и чем отличается 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. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.
Почему не стоит использовать изменяемые объекты как параметры по-умолчанию?

В Python не рекомендуется использовать изменяемые объекты в качестве значений параметров по умолчанию по следующим причинам:

— Значения по умолчанию вычисляются один раз при определении функции, а не при каждом вызове.

— Если использовать изменяемый объект (список, словарь), то изменения в нем будут сохраняться между вызовами функции. Это может привести к неочевидному поведению и трудноуловимым ошибкам при многократном вызове функции.

В качестве альтернативы можно задавать значение по умолчанию как None, а в теле функции создавать новый изменяемый объект, если значение не передано.
Такой подход позволяет избежать «эффекта переноса» состояния между вызовами и делает код более понятным и предсказуемым.
Что такое замыкание?

Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.

Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.

Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).

В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
Как объединить два списка в список кортежей?

Для объединения в список кортежей можно использовать функцию zip, причем не только двух, но трех и более списков.
В чем отличие @foobar от @foobar()?

@foobar и @foobar() — это разные способы применения декораторов.

@foobar применяет декоратор без аргументов, а @foobar() применяет декоратор с аргументами.
То есть @foobar() вызывает декоратор foobar, передавая ему аргументы, а затем результат (декорированная функция) применяется к функции.
Узнаем, сколько всего определенных букв в строке

Один из способов узнать количество определенных букв в строке максимально быстрым методом — использовать метод count для строки. Этот метод принимает символ или подстроку и возвращает количество их вхождений в строку.

Этот метод является достаточно быстрым, так как использует внутренние оптимизации CPython, которые работают на низком уровне. Он также не требует дополнительной памяти, за исключением простой переменной, используемой для хранения результата.
Что такое каррирование?

Каррирование — это техника преобразования функции с несколькими аргументами в цепочку функций, каждая из которых принимает только один аргумент.

Это позволяет зафиксировать некоторые аргументы функции и создать новую функцию с меньшим количеством аргументов.

Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Напишите функцию, которая будет принимать список nums, содержащий числа в диапазоне от 1 до 100, и возвращать отсортированный список чисел, которые в списке nums встречались дважды.

Примеры:

duplicate_nums([1, 2, 3, 4, 3, 5, 6])
➞ [3]

duplicate_nums([81, 72, 43, 72, 81, 99, 99, 100, 12, 54])
➞ [72, 81, 99]

duplicate_nums([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
➞ None

Примечания:
— никакое число не будет встречаться в nums трижды и более раз,
— если никакое число в nums не встречалось дважды, функция должна вернуть None.
Что такое dict comprehension?

Dict comprehension — это способ конструирования словарей в одну строку, аналогичный list comprehension.

Синтаксис dict comprehension: {ключ: значение for элемент in итерируемый_объект if условие}

Основные преимущества dict comprehension:
— Краткость и читабельность по сравнению с обычным циклом.
— Более высокая производительность за счет оптимизации.
— Удобство создания словарей «на лету» по данным.

Dict comprehension используется для:
— Преобразования данных из одного вида в другой.
— Создания словарей на основе списков или других итерируемых объектов.
— Фильтрации и обработки данных в процессе создания словаря.
🐍 У нас есть еженедельная email-рассылка, посвященная последним открытиям и тенденциям в мире Python.

В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями

👉Подписаться👈
Что такое PySimpleGUI?

PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.

PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
Узнаем, сколько раз встречается каждая буква в предложении

Код представлен на картинке.
Извлекаем имя из адреса электронной почты

Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.

Это регулярное выражение начинает поиск с начала строки с помощью символа «^» и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ «@» и останавливается.
Как решить проблему конфликта зависимостей?

Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.

Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.

При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.

Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Что значит конструкция pass?

В Python, pass является пустым оператором. Он используется там, где синтаксически требуется оператор, но никаких действий выполнять не нужно. Например, это может быть полезно при написании заглушки функции, которая будет реализована позже, или в цикле, который ничего не должен делать на данной итерации.
Что такое фабрика декораторов?

Фабрика декораторов — это особая разновидность функции высшего порядка, которая возвращает декоратор вместо прямого результата. Главное отличие фабрики декораторов от обычного декоратора в том, что она принимает аргументы, которые могут конфигурировать логику декоратора.

Например, фабрика может принимать имя лог-файла, в который будет производиться запись при вызове декорируемой функции. Или уровень логирования вместо простой записи всех вызовов.
Такой подход позволяет создавать переиспользуемые и гибко настраиваемые декораторы для решения разных задач.

Главные преимущества фабрик декораторов — это возможность абстрагироваться от конкретики реализации, избежать дублирования кода и создавать интуитивный API для декораторов с настройками.
Что такое рефлексия?

Рефлексия — это возможность программы изучать и модифицировать свою структуру и поведение во время выполнения.

В отличие от интроспекции, которая позволяет получать информацию об объектах, рефлексия дает возможность изменять саму программу.

Основные возможности рефлексии в Python:
— Создание новых классов и объектов программно во время выполнения
— Изменение структуры класса в рантайме путем добавления/удаления атрибутов и методов
— Вызов методов по их именам, переданным в виде строк
— Создание прокси-объектов для перехвата вызовов функций и методов
Для чего используются метаклассы?

Метаклассы используются для создания классов и позволяют изменять поведение класса, модифицировать процесс его создания.

Основные случаи использования метаклассов:
— Реализация паттернов проектирования, таких как Singleton, Factory Method и другие.
— Проверка типов. Метакласс может валидировать атрибуты класса, параметры методов, выполнять инъекцию зависимостей.
— Регистрация классов. С помощью метакласса можно автоматически регистрировать создаваемые классы, например, в глобальном реестре.
— Создание протоколов и интерфейсов, похожих на языки, подобные Protocol Buffers.
— Логирование и трассировка. Метакласс позволяет следить за созданием класса и вызовами его методов.
— Расширение класса дополнительным функционалом. Добавление методов к классу через метакласс.
Что такое async?

Async — это синтаксис для создания асинхронного кода на основе корутин.
Асинхронное программирование позволяет выполнять операции вне основного потока выполнения программы.

С помощью async def определяются асинхронные функции-корутины. Такие функции не выполняются сразу, а возвращают объект-корутину.
Для запуска корутин используется await. Это передает управление обратно в событийный цикл до завершения корутины.

Asyncio — стандартный модуль для работы с асинхронным кодом. Он содержит событийный цикл и различные классы.

Асинхронный код усложняет логику программы, но позволяет добиться большей производительности за счет неблокирующих вызовов.

*Корутины полезны для операций ввода/вывода, ожидания сети, обращения к БД — там, где нужно не блокировать основной поток.
Как сравниваются последовательности?

При сравнении происходит поэлементное (по порядку) сравнение элементов последовательностей.

Сначала сравниваются первые элементы, если они равны — вторые и т.д.

Если при сравнении очередных элементов, элемент одной последовательности оказался больше элемента другой — то результат сравнения определен.

Если дошли до конца одной последовательности, то большей считается более длинная.

Таким образом, сравнение идет поэлементно слева направо до тех пор, пока элементы равны или пока не закончится одна из последовательностей. Это называется лексикографическим порядком сравнения.