Python: популярные вопросы на собеседовании
Python: вопросы и ответы для подготовки к собеседованию. Раздел охватывает: синтаксис, типы и коллекции; ООП и dataclasses; генераторы и итераторы; декораторы; GIL, потоки и процессы; asyncio и неблокирующий I/O; виртуальные окружения и packaging (virtualenv/venv, poetry/pip); тестирование (pytest); типизацию (typing, mypy); фреймворки (Django/FastAPI/Flask).
Junior
-
Какие типы данных есть в Python? Junior
В Python есть несколько встроенных типов данных: числовые (int, float, complex), строки, списки (изменяемые), кортежи (неизменяемые), множества (уникальные элементы) и словари (пары "ключ-значение"), каждый из которых служит своей цели и имеет свои особенности использования.
Посмотреть ответ полностью -
Чем отличаются изменяемые и неизменяемые типы? Junior
Изменяемые типы данных в Python, такие как списки и словари, могут быть изменены после создания, тогда как неизменяемые типы, например, строки и кортежи, не подлежат изменениям и при попытке их изменить создается новый объект. Понимание этих различий важно для эффективного управления памятью и избежания ошибок.
Посмотреть ответ полностью -
Чем отличаются операторы == и is? Junior
Оператор
Посмотреть ответ полностью==сравнивает значения объектов, аisпроверяет, ссылаются ли переменные на один и тот же объект в памяти. Используйте==для сравнения содержимого иisдля проверки идентичности, например, при работе сNone. -
Что такое PEP 8 и почему важно следовать его рекомендациям? Junior
PEP 8 — это набор рекомендаций по стилю написания кода на Python, который обеспечивает его читаемость и единообразие, облегчая поддержку и совместную работу над проектами. Соблюдение этих правил помогает снизить вероятность ошибок и улучшает восприятие кода другими разработчиками.
Посмотреть ответ полностью -
Поддерживает ли Python ООП? Какие принципы ООП реализованы? Junior
Python поддерживает объектно-ориентированное программирование, реализуя основные принципы, такие как инкапсуляция, наследование, полиморфизм и абстракция, что позволяет создавать защищенные, гибкие и расширяемые коды.
Посмотреть ответ полностью -
Чем функция отличается от метода в Python? Junior
Функция в Python — это независимый блок кода, который может быть вызван из любой части программы, в то время как метод — это функция, связанная с конкретным объектом и определенная внутри класса, принимающая аргумент
Посмотреть ответ полностьюselfдля доступа к данным этого объекта. -
В чем разница между списком (list) и кортежем (tuple)? Junior
Списки (list) — изменяемые коллекции, позволяющие добавлять и удалять элементы, тогда как кортежи (tuple) — неизменяемые, что делает их более безопасными и быстрыми при доступе к элементам; кортежи можно использовать в качестве ключей в словарях, а списки имеют больше встроенных методов.
Посмотреть ответ полностью -
Что такое множество (set) и для чего оно используется? Junior
Множество в Python — это неупорядоченная коллекция уникальных элементов, используемая для удаления дубликатов и выполнения математических операций, таких как пересечение и объединение. Оно изменяемо, поддерживает операции добавления и удаления элементов, и не допускает дубликатов.
Посмотреть ответ полностью -
Что такое словарь (dict) в Python? Junior
Словарь в Python — это изменяемая структура данных для хранения пар "ключ-значение", позволяющая быстро получать доступ к значениям по уникальным ключам; ключи должны быть неизменяемыми, а значения могут быть любого типа.
Посмотреть ответ полностью -
Как проверить наличие элемента в коллекции (например, в списке или множестве)? Junior
Для проверки наличия элемента в коллекции в Python можно использовать оператор
Посмотреть ответ полностьюin, который подходит для списков и множеств, или методlist.count()для списков, но он менее эффективен. Множества обеспечивают более быстрый поиск (O(1)) по сравнению со списками (O(n)), поэтому их лучше использовать для частых проверок. -
Что такое срезы (slices) и как ими пользоваться? Junior
Срезы в Python позволяют извлекать подмножества данных из последовательностей, таких как списки и строки, с помощью синтаксиса
Посмотреть ответ полностьюsequence[start:stop:step], где можно указать начальный и конечный индексы, а также шаг. Это удобный и лаконичный способ манипуляции данными, позволяющий легко извлекать и изменять элементы. -
Как развернуть список или строку в Python? Junior
Разворот списка или строки в Python можно осуществить с помощью метода
Посмотреть ответ полностьюreverse(), срезов[::-1]или функцииreversed(), которая возвращает итератор. Методreverse()изменяет оригинальный список на месте, тогда как срезы иreversed()создают новые объекты, что особенно важно для неизменяемых строк. -
Как работает функция range()? Какие есть варианты ее использования? Junior
Функция range() генерирует последовательности целых чисел и часто используется в циклах для итерации по числовым значениям; она возвращает итерируемый объект, который экономит память, не загружая все значения сразу.
Посмотреть ответ полностью -
Что такое списковое включение (list comprehension) в Python? Junior
Списковое включение в Python — это способ создания новых списков, применяя выражение к элементам итерируемого объекта с использованием компактного синтаксиса, что повышает читаемость кода.
Посмотреть ответ полностью -
Можно ли изменить строку после создания? Junior
Строки в Python являются неизменяемыми объектами, что означает, что их содержимое нельзя изменить после создания; вместо этого для изменения строки создается новая строка с нужным содержимым, используя методы и операции, такие как
Посмотреть ответ полностьюreplaceи сложение. -
Чем отличается оператор == от оператора is? Junior
Оператор
Посмотреть ответ полностью==сравнивает значения объектов, тогда какisпроверяет, являются ли два объекта одним и тем же объектом в памяти. Используйте==для сравнения содержимого, аisдля проверки идентичности объектов, например, при проверке наNone. -
Как в Python умножать строки? Junior
Умножение строк в Python позволяет повторять строку заданное количество раз с помощью оператора
Посмотреть ответ полностью*, создавая новую строку. Это полезно для формирования повторяющихся шаблонов, однако важно помнить, что умножение на нецелые или отрицательные числа приводит к ошибкам или пустым строкам. -
Как в Python умножать списки? Junior
В Python умножение списков может означать создание нового списка с повторяющимися элементами при умножении на целое число, умножение каждого элемента на заданное число с помощью списковых включений или функции
Посмотреть ответ полностьюmap(), а также поэлементное умножение двух списков с использованием функцииzip(). -
Что означает конструкция if __name__ == '__main__': в скрипте? Junior
Конструкция
Посмотреть ответ полностьюif __name__ == '__main__':в Python определяет, запущен ли модуль напрямую или импортирован в другой, позволяя выполнять определенный код только при прямом запуске, что улучшает структуру и повторное использование кода. -
В чем разница между import module и from module import name? Junior
Существует два основных способа импорта модулей в Python:
Посмотреть ответ полностьюimport module, который загружает весь модуль и требует префикса для доступа к его элементам, иfrom module import name, который позволяет импортировать конкретные элементы без префикса. Выбор между ними зависит от необходимости избежать конфликтов имен и улучшить читаемость кода. -
Что такое тернарный оператор в Python и как его записать? Junior
Тернарный оператор в Python позволяет выбирать между двумя значениями на основе условия в одной строке, что делает код более компактным и читаемым. Он записывается в формате
Посмотреть ответ полностьюvalue_if_true if condition else value_if_falseи подходит для простых условий, но следует избегать его использования в сложных логических выражениях для сохранения читаемости. -
Как осуществляется обработка исключений в Python? Junior
Обработка исключений в Python позволяет управлять ошибками и предотвращать аварийное завершение программы с помощью блоков try-except для обработки возможных исключений, а также блоков finally и else для выполнения кода вне зависимости от того, произошла ошибка или нет.
Посмотреть ответ полностью -
Как открыть файл и прочитать из него данные в Python? Junior
Для открытия файла в Python используется функция
Посмотреть ответ полностьюopen(), которая возвращает объект файла, и можно читать данные с помощью методовread(),readline()илиreadlines(). Рекомендуется применять конструкциюwithдля автоматического закрытия файла и обрабатывать возможные ошибки, такие как отсутствие файла или неправильный режим открытия. -
Что такое None в Python? Junior
Посмотреть ответ полностьюNoneв Python представляет собой отсутствие значения и является единственным экземпляром классаNoneType. Он используется для явного указания, что переменная не содержит информации, и в качестве значения по умолчанию в функциях, что позволяет различать переданные и непереданные значения. При сравнении сNoneрекомендуется использовать операторis, чтобы избежать ошибок. -
Чем отличается оператор // от / при делении чисел? Junior
Оператор
Посмотреть ответ полностью/выполняет деление с плавающей точкой, всегда возвращая результат в виде float, тогда как оператор//выполняет целочисленное деление, возвращая наибольшее целое число, не превышающее результат, и обычно используется для получения целых значений. -
Как проверить, что строка содержит только буквы? Junior
Для проверки, содержит ли строка только буквы в Python, можно использовать метод
Посмотреть ответ полностью.isalpha(), который прост и удобен, регулярные выражения для более гибких условий или цикл с проверкой каждого символа, что позволяет добавлять дополнительные условия. -
Как проверить, что строка содержит только цифры? Junior
Для проверки, содержит ли строка только цифры, можно использовать метод
Посмотреть ответ полностьюstr.isdigit(), который возвращаетTrueтолько для строк, состоящих из цифр (0-9), илиstr.isnumeric(), который также учитывает другие числовые символы. Регулярные выражения предоставляют более гибкий способ проверки, позволяя задавать сложные условия. -
Как проверить, что строка содержит только буквенно-цифровые символы? Junior
Для проверки, содержит ли строка только буквенно-цифровые символы в Python, можно использовать метод
Посмотреть ответ полностьюisalnum(), который возвращаетTrue, если строка не пуста и состоит только из букв и цифр, либо регулярные выражения для более сложных условий. -
Как объединить два списка в Python? Junior
Для объединения двух списков в Python можно использовать оператор
Посмотреть ответ полностью+, методextend(), оператор разупаковки*или цикл сappend(), каждый из которых имеет свои преимущества и недостатки, например,+создает новый список, аextend()изменяет существующий. -
Чем отличается оператор присваивания (=) от оператора равенства (==)? Junior
Оператор присваивания (=) используется для назначения значений переменным, в то время как оператор равенства (==) сравнивает два значения и возвращает
Посмотреть ответ полностьюTrueилиFalse. Важно не путать эти операторы, так как присваивание изменяет состояние переменной, а сравнение — нет. -
Что означает выражение "в Python все является объектом"? Junior
В Python все является объектом, что означает, что все типы данных, включая числа, строки и функции, являются экземплярами классов с уникальными идентификаторами, типами и значениями; это упрощает понимание языка и позволяет применять объектно-ориентированное программирование для организации кода.
Посмотреть ответ полностью -
Что означает динамическая типизация в Python? Junior
Динамическая типизация в Python позволяет изменять тип переменной в процессе выполнения программы, что упрощает код и повышает гибкость, но также может привести к ошибкам во время выполнения и затруднениям в масштабируемости.
Посмотреть ответ полностью -
Является ли Python сильно типизированным языком? Почему? Junior
Python имеет динамическую типизацию и допускает неявные преобразования типов, но не является слабо типизированным языком, так как не позволяет выполнять операции над несовместимыми типами без явного преобразования.
Посмотреть ответ полностью -
Является ли Python интерпретируемым языком? Что это означает? Junior
Python является интерпретируемым языком программирования, что означает, что его код выполняется построчно во время выполнения без предварительной компиляции, что упрощает отладку и обеспечивает кроссплатформенность, но может снижать скорость выполнения по сравнению с компилируемыми языками.
Посмотреть ответ полностью -
Как поменять местами значения двух переменных в Python? Junior
В Python значения двух переменных можно менять несколькими способами, включая использование временной переменной, арифметических и побитовых операций, но наиболее удобным и читаемым методом является распаковка кортежей.
Посмотреть ответ полностью -
Как проверить файл Python на синтаксические ошибки без выполнения кода? Junior
Для проверки синтаксиса Python-кода без его выполнения можно использовать модуль
Посмотреть ответ полностьюpy_compile, командуpython -m py_compile, анализаторastили статические анализаторы, такие какpylintиflake8. Эти методы помогают выявить синтаксические ошибки и обеспечивают корректность кода. -
Что возвращает функция type()? Junior
Функция
Посмотреть ответ полностьюtype()в Python определяет тип объекта и возвращает его, что полезно для отладки и понимания структуры данных; однако для проверки типов рекомендуется использоватьisinstance(), так как это более гибкий подход. -
Какие логические операторы существуют в Python? Junior
В Python логические операторы, такие как AND, OR и NOT, используются для выполнения логических операций, возвращая значения True или False в зависимости от условий; они позволяют комбинировать несколько условий и инвертировать логические значения.
Посмотреть ответ полностью -
Для чего нужен оператор pass? Junior
Оператор
Посмотреть ответ полностьюpassв Python используется для создания пустых конструкций, позволяя избежать синтаксических ошибок в тех случаях, когда логика выполнения еще не реализована, например, в функциях, классах или условных конструкциях. -
Для чего используется оператор assert? Junior
Оператор
Посмотреть ответ полностьюassertв Python используется для проверки истинности выражений в коде и служит инструментом отладки, позволяя выявлять ошибки при нарушении предположений о логике программы, что упрощает процесс разработки и тестирования. -
Как соединить список строк в одну строку? Junior
Для соединения списка строк в одну строку в Python используется метод
Посмотреть ответ полностьюjoin(), который объединяет элементы с указанным разделителем, обеспечивая оптимальность и читаемость кода. -
Как разбить строку на список подстрок? Junior
Для разбивания строки на список подстрок в Python используется метод
Посмотреть ответ полностьюsplit(), который делит строку по указанному разделителю и возвращает список. По умолчанию метод разделяет по пробелам, но также поддерживает другие символы и ограничение по количеству разделений. -
Как удалить пробелы в начале и конце строки? Junior
Для удаления пробелов в начале и конце строки в Python используется метод
Посмотреть ответ полностьюstrip(), который очищает строку от лишних пробелов с обеих сторон. Также существуют методыlstrip()иrstrip()для удаления пробелов только с одной стороны. -
Как заменить в строке одну подстроку на другую? Junior
В Python для замены подстроки в строке можно использовать метод
Посмотреть ответ полностьюstr.replace()для простых замен,str.translate()сstr.maketrans()для замены отдельных символов и модульreс методомre.sub()для более сложных случаев с регулярными выражениями. -
Как добавить элемент в конец списка? Junior
Для добавления элемента в конец списка в Python используется метод
Посмотреть ответ полностьюappend(), который динамически увеличивает размер списка. Этот метод наиболее эффективен и позволяет добавлять элементы за время O(1). -
Назовите несколько способов скопировать список. Junior
Существуют различные способы копирования списков в Python, включая метод
Посмотреть ответ полностьюcopy(), срезы и функциюlist(), которые создают поверхностные копии, а также методdeepcopy()из модуляcopyдля глубокого копирования, который учитывает вложенные объекты. Выбор метода зависит от структуры данных и необходимости независимости копий. -
Как получить ввод от пользователя в Python? Junior
Для получения ввода от пользователя в Python используется функция
Посмотреть ответ полностьюinput(), которая приостанавливает выполнение программы и ожидает ввода данных с клавиатуры, сохраняя результат в виде строки; при необходимости введенные данные можно преобразовать в другие типы, такие как целые числа или числа с плавающей точкой. -
В чем разница между return и print при написании функции? Junior
Посмотреть ответ полностьюprintвыводит информацию на экран, тогда какreturnзавершает выполнение функции и возвращает значение, которое можно использовать в дальнейшем коде. Используйтеprintдля отображения данных, аreturnдля передачи значений между функциями. -
Что возвращает функция, если в ней отсутствует оператор return? Junior
Если в функции отсутствует оператор
Посмотреть ответ полностьюreturn, она завершает выполнение и автоматически возвращает значениеNone, что указывает на отсутствие результата. -
Может ли функция Python возвращать несколько значений? Junior
Функции в Python могут возвращать несколько значений с помощью кортежей, списков или словарей, что позволяет удобно организовывать данные и улучшать читаемость кода.
Посмотреть ответ полностью -
Что такое метод __init__ в классе Python? Junior
Метод
Посмотреть ответ полностью__init__в Python — это специальный метод, который автоматически вызывается при создании объекта класса для инициализации его атрибутов, позволяя задать начальные значения и обеспечивая корректную подготовку объекта к использованию. -
Как получить случайное число в Python? Junior
В Python для получения случайных чисел используется модуль
Посмотреть ответ полностьюrandom, который позволяет генерировать как целые, так и дробные числа в заданных диапазонах, а также выбирать случайные элементы из списков. -
Как перемешать список случайным образом? Junior
Чтобы перемешать список в Python, используйте функцию
Посмотреть ответ полностьюrandom.shuffle(), которая изменяет оригинальный список на месте, илиrandom.sample(), которая возвращает новый перемешанный список, сохраняя оригинал. -
Как выбрать случайный элемент из списка? Junior
Чтобы выбрать случайный элемент из списка в Python, используйте модуль
Посмотреть ответ полностьюrandomи функциюrandom.choice(), которая обеспечивает простой и эффективный способ получения одного элемента; также можно применятьrandom.randint()для генерации случайного индекса илиrandom.sample()для выбора нескольких уникальных элементов. -
Как получить несколько случайных элементов из списка без повторений? Junior
Для получения нескольких уникальных случайных элементов из списка в Python используйте функцию
Посмотреть ответ полностьюrandom.sample(), которая позволяет выбрать заданное количество элементов без повторений. Убедитесь, что запрашиваемое количество не превышает длину списка, чтобы избежать ошибок. -
Что означает отрицательный индекс при обращении к последовательности? Junior
Отрицательные индексы в Python позволяют обращаться к элементам последовательностей с конца, где
Посмотреть ответ полностью-1указывает на последний элемент, а-2— на предпоследний. Это удобно для получения элементов, когда длина последовательности неизвестна, и помогает улучшить читаемость кода. -
Что произойдет при обращении к несуществующему индексу списка? Junior
Обращение к несуществующему индексу списка в Python приводит к ошибке
Посмотреть ответ полностьюIndexError, так как индексы должны находиться в диапазоне от0доn-1, гдеn— количество элементов в списке. -
Как работает выражение 5 < x < 10 в Python? Junior
В Python выражение 5 < x < 10 представляет собой цепное сравнение, которое проверяет, находится ли x в диапазоне между 5 и 10, и эквивалентно (5 < x) and (x < 10). Если оба условия истинны, результат будет True, что делает код более читаемым и лаконичным.
Посмотреть ответ полностью -
Чем отличаются операторы break и continue? Junior
Операторы
Посмотреть ответ полностьюbreakиcontinueв Python управляют выполнением циклов:breakзавершает цикл, аcontinueпропускает текущую итерацию, переходя к следующей. -
Когда следует использовать цикл while вместо цикла for? Junior
Цикл while используется, когда количество итераций заранее неизвестно и выполнение зависит от условия, которое может меняться, в то время как цикл for подходит для случаев с известным количеством итераций и перебором коллекций.
Посмотреть ответ полностью -
Что такое наследование (inheritance) в ООП? Junior
Наследование в ООП позволяет создавать новые классы на основе существующих, что способствует повторному использованию кода и упрощает его поддержку. Базовые классы содержат общие атрибуты и методы, а производные классы могут их расширять или переопределять.
Посмотреть ответ полностью -
Что такое инкапсуляция (encapsulation) в ООП? Junior
Инкапсуляция в ООП — это принцип, позволяющий скрывать внутренние детали объектов и защищать данные от некорректного использования, что способствует более структурированному и безопасному коду.
Посмотреть ответ полностью -
Что такое полиморфизм (polymorphism) в ООП? Junior
Полиморфизм в ООП позволяет объектам разных классов обрабатывать данные единым способом, используя один интерфейс для разных реализаций. Он делится на полиморфизм времени компиляции через перегрузку и полиморфизм времени выполнения через переопределение методов, что упрощает код, повышает его расширяемость и читаемость.
Посмотреть ответ полностью -
Что такое исключение TypeError и когда оно возникает? Junior
Исключение TypeError в Python возникает, когда операция или функция получает аргумент неправильного типа, например, при попытке сложить строку и число. Это сигнализирует о несоответствии типов данных, и для его предотвращения следует проверять типы, использовать аннотации и обрабатывать исключения.
Посмотреть ответ полностью -
Что такое исключение ValueError и когда оно возникает? Junior
ValueError в Python возникает, когда функция получает аргумент правильного типа, но значение не соответствует ожидаемым условиям, например, при неправильном формате данных или неподходящих значениях. Это исключение помогает обрабатывать ошибки и улучшать устойчивость кода.
Посмотреть ответ полностью -
Что такое исключение NameError? Junior
Исключение
Посмотреть ответ полностьюNameErrorв Python возникает, когда интерпретатор не может найти указанное имя, например, переменную или функцию, что может быть вызвано неопределенностью, опечатками или ошибками в области видимости. Чтобы избежать этой ошибки, важно проверять определения переменных, использовать инструменты IDE и применять отладку. -
Перечислите основные числовые типы в Python. Junior
В Python существуют три основных числовых типа: целые числа (int) для работы с целыми значениями, числа с плавающей запятой (float) для дробных значений и комплексные числа (complex) для работы с числами, имеющими действительную и мнимую части.
Посмотреть ответ полностью -
Как объявить многострочную строку в Python? Junior
Многострочные строки в Python объявляются с помощью тройных кавычек (''' или """) и позволяют записывать текст, занимающий несколько строк, без использования символов переноса. Они упрощают форматирование и делают код более читаемым, что особенно полезно для документации и длинных текстовых блоков.
Посмотреть ответ полностью -
Почему смешивание табуляции и пробелов в отступах – плохая идея? Junior
Смешивание табуляций и пробелов в отступах приводит к непоследовательности, затрудняет чтение кода и может вызывать ошибки выполнения в Python, так как интерпретатор не всегда правильно определяет блоки кода. Рекомендуется использовать один тип отступа, предпочтительно пробелы, и настраивать редактор для автоматической замены табуляций на пробелы.
Посмотреть ответ полностью -
Для чего используются функции dir() и help()? Junior
Функции
Посмотреть ответ полностьюdir()иhelp()в Python позволяют изучать объекты и их атрибуты:dir()возвращает список доступных методов и атрибутов объекта, аhelp()предоставляет подробную документацию о них, включая описания и примеры использования. -
Почему в Python отступы (indentation) критически важны для синтаксиса? Junior
Отступы в Python определяют структуру кода и уровень вложенности, делая его более читаемым и предотвращая ошибки исполнения, так как неправильные отступы могут привести к сбоям в работе программы.
Посмотреть ответ полностью -
Что предпочтительнее использовать для отступов: табы или пробелы, и почему? Junior
В Python рекомендуется использовать пробелы для отступов, так как это обеспечивает лучшую читаемость и совместимость кода. Стандарт PEP 8 рекомендует использовать 4 пробела на уровень отступа для избежания ошибок и повышения визуальной однородности.
Посмотреть ответ полностью -
Какие побитовые операторы имеются в Python? Junior
В Python доступны побитовые операторы, такие как AND (&), OR (|), XOR (^), NOT (~), а также операторы сдвига влево (<<) и вправо (>>), которые позволяют выполнять операции над отдельными битами целых чисел для манипуляции данными на низком уровне.
Посмотреть ответ полностью
Middle
-
Что такое *args и **kwargs в объявлении функции? Зачем они нужны? Middle
Посмотреть ответ полностью*argsи**kwargsпозволяют функциям принимать произвольное количество позиционных и именованных аргументов соответственно, что делает их более гибкими и удобными для использования.*argsсобирает аргументы в кортеж, а**kwargs— в словарь, что упрощает работу с параметрами и улучшает читаемость кода. -
Как передаются аргументы в функцию в Python: по значению, по ссылке или иначе? Middle
В Python аргументы передаются по ссылке, что означает, что функция получает ссылку на объект, а не его копию; изменения в изменяемых типах данных (например, списках) будут видны за пределами функции, тогда как неизменяемые типы (например, числа) нельзя изменить, но можно создать новый объект.
Посмотреть ответ полностью -
Почему опасно использовать изменяемые объекты в качестве значений параметров по умолчанию? Middle
Использование изменяемых объектов в качестве значений параметров по умолчанию может привести к накоплению изменений между вызовами функции, так как объект инициализируется лишь один раз. Рекомендуется использовать неизменяемые объекты или значение
Посмотреть ответ полностьюNone, чтобы избежать неожиданных побочных эффектов. -
Что такое замыкание (closure) в Python? Middle
Замыкание в Python — это функция, которая запоминает свое окружение и может обращаться к переменным внешней функции даже после ее завершения, что позволяет сохранять состояние между вызовами и инкапсулировать данные.
Посмотреть ответ полностью -
Можно ли объявить функцию внутри другой функции? Что при этом происходит? Middle
В Python можно объявлять функции внутри других функций, что называется вложенными функциями. Они имеют доступ к переменным внешней функции, что позволяет создавать замыкания и инкапсулировать логику, делая код более организованным. Вложенные функции полезны для создания функций с фиксированными значениями и управления областью видимости переменных.
Посмотреть ответ полностью -
Можно ли передать функцию как аргумент другой функции? Middle
В Python функции можно передавать как аргументы другим функциям, что позволяет создавать гибкий и модульный код, улучшая его читаемость и структуру.
Посмотреть ответ полностью -
Что такое лямбда-функция в Python и когда ее имеет смысл использовать? Middle
Лямбда-функции в Python — это анонимные функции, создаваемые с помощью ключевого слова
Посмотреть ответ полностьюlambda, которые используются для написания небольших одноразовых функций, особенно в случаях, когда нужно передать функцию в другие функции, такие какmap()илиfilter(), и когда важно сохранить компактность кода. -
Чем отличается списковое включение от генераторного выражения? Middle
Списковое включение создает новый список и хранит все элементы в памяти, тогда как генераторное выражение возвращает генератор, который выдает элементы по одному, что экономит память и подходит для обработки больших данных.
Посмотреть ответ полностью -
В чем разница между shallow copy и deep copy объектов? Middle
Поверхностное копирование (shallow copy) создает новый объект, копируя ссылки на вложенные объекты, что позволяет изменениям в них отражаться на обеих копиях, тогда как глубокое копирование (deep copy) создает полностью независимую копию, рекурсивно копируя все вложенные объекты, что защищает оригинал от изменений.
Посмотреть ответ полностью -
Что такое декоратор в Python и для чего он нужен? Middle
Декораторы в Python позволяют модифицировать функции, добавляя дополнительную логику без изменения их исходного кода, что упрощает повторное использование и улучшает читаемость. Они оборачивают функции, добавляя функционал, как логирование или проверка прав доступа, и могут использоваться с синтаксисом "@" для удобства.
Посмотреть ответ полностью -
Для чего используется ключевое слово global? Middle
Ключевое слово
Посмотреть ответ полностьюglobalв Python позволяет изменять глобальные переменные внутри функций, объявляя их явно, что предотвращает создание новых локальных переменных с тем же именем. Однако его использование следует ограничивать, чтобы избежать путаницы и повысить предсказуемость кода. -
Что такое аннотации типов (type hints) и зачем они нужны? Middle
Аннотации типов в Python позволяют указывать ожидаемые типы данных для функций и переменных, что улучшает читаемость кода и позволяет использовать инструменты статической проверки, такие как MyPy, для выявления ошибок до выполнения программы.
Посмотреть ответ полностью -
Что происходит при присваивании: например, при выполнении оператора a = b? Middle
При присваивании в Python переменная создаёт ссылку на объект, а не копирует его, что означает, что изменения через одну переменную отразятся на другой, если объект изменяемый. Для неизменяемых объектов создаётся новая копия при изменении.
Посмотреть ответ полностью -
Что такое менеджер контекста (context manager) и зачем он нужен? Middle
Менеджер контекста в Python управляет ресурсами, обеспечивая их правильное открытие и закрытие, что минимизирует риск утечек и ошибок. Он реализуется через методы
Посмотреть ответ полностью__enter__и__exit__, упрощая код и автоматизируя обработку исключений. -
Как удалить дубликаты из списка наиболее простым способом? Middle
Для удаления дубликатов из списка в Python можно использовать множество, которое автоматически отбрасывает повторяющиеся элементы, или словарь, который сохраняет порядок элементов. Если порядок важен, стоит рассмотреть использование словаря или цикла с проверкой наличия, хотя это может быть менее эффективно.
Посмотреть ответ полностью -
Где быстрее поиск элемента: в списке или в словаре, и почему? Middle
Поиск элемента в словаре происходит значительно быстрее, чем в списке, благодаря использованию хеширования, что обеспечивает постоянное время доступа O(1) по сравнению с линейным O(n) в списке.
Посмотреть ответ полностью -
Что такое нотация Big O и для чего она используется? Middle
Нотация Big O описывает сложность алгоритмов, оценивая, как время выполнения изменяется в зависимости от размера входных данных, и помогает разработчикам выбирать эффективные алгоритмы, основываясь на их производительности в наихудших случаях.
Посмотреть ответ полностью -
Какова сложность доступа и поиска элементов в списке и словаре? Middle
Списки в Python обеспечивают доступ к элементам за O(1) и поиск за O(n), в то время как словари обеспечивают аналогичный доступ по ключам за O(1) в среднем, но могут иметь O(n) в худшем случае из-за коллизий. Словари более эффективны для поиска, тогда как списки лучше подходят, когда важен порядок элементов.
Посмотреть ответ полностью -
Чем отличается модуль от пакета в Python? Middle
Модуль в Python — это файл с кодом (.py), содержащий функции и классы, тогда как пакет — это директория с файлом
Посмотреть ответ полностью__init__.py, позволяющая организовывать модули в иерархическую структуру. -
Как Python ищет модуль при импорте? Middle
При импорте модуля Python сначала проверяет кэш загруженных модулей, затем ищет в стандартных директориях, указанных в
Посмотреть ответ полностьюsys.path, и пользовательских директориях из переменной окруженияPYTHONPATH, а также в пакетах. Если модуль не найден, выбрасывается исключениеModuleNotFoundError. -
Для чего нужен файл __init__.py? Middle
Файл
Посмотреть ответ полностью__init__.pyиспользуется для обозначения директории как пакета в Python, позволяет выполнять код при импорте и управлять доступом к классам и функциям, упрощая структуру и организацию кода. -
Что такое __pycache__ и файлы с расширением .pyc? Middle
Директория
Посмотреть ответ полностью__pycache__содержит скомпилированные файлы.pyc, которые представляют собой байт-код Python, позволяя ускорить загрузку и выполнение модулей при повторном использовании. Эти файлы создаются автоматически при импорте и помогают оптимизировать производительность, избегая повторной компиляции. -
Как выполняется код на Python интерпретатором? Middle
Код на Python выполняется интерпретатором, который сначала читает и разбивает его на токены, затем анализирует синтаксис и семантику, компилирует в байт-код и, наконец, исполняет его на виртуальной машине, что обеспечивает кроссплатформенность и удобство разработки.
Посмотреть ответ полностью -
Для чего нужна встроенная функция id()? Middle
Функция
Посмотреть ответ полностьюid()в Python возвращает уникальный идентификатор объекта, который помогает различать объекты в памяти. Этот идентификатор постоянен на протяжении жизни объекта и используется для сравнения идентичности объектов, но не следует путать его с их значениями. -
Для чего используется флаг -O при запуске Python? Middle
Флаг
Посмотреть ответ полностью-Oв Python используется для оптимизации выполнения кода, позволяя компилировать его в байт-код с улучшениями, такими как игнорирование инструкцийassert, что может повысить производительность. -
Что такое GIL (Global Interpreter Lock) и как он влияет на многопоточность? Middle
GIL (Global Interpreter Lock) — это механизм в Python, который ограничивает выполнение байт-кода одним потоком в каждый момент времени, что упрощает управление памятью, но сдерживает многопоточность, особенно в вычислительно интенсивных задачах; для обхода его ограничений рекомендуется использовать многопроцессорность или асинхронное программирование.
Посмотреть ответ полностью -
В чем разница между потоками и процессами в Python? Middle
Потоки в Python подходят для I/O-ориентированных задач и используют общее адресное пространство, но ограничены GIL, тогда как процессы изолированы, более затратны в создании, но лучше подходят для CPU-ориентированных задач и могут использовать несколько ядер.
Посмотреть ответ полностью -
Что такое asyncio и в чем его особенность? Middle
Посмотреть ответ полностьюasyncio— это библиотека Python для асинхронного программирования, позволяющая выполнять несколько операций одновременно без блокировки, используя корутины и событийный цикл для управления выполнением задач. -
Для чего используются ключевые слова async и await? Middle
Ключевые слова
Посмотреть ответ полностьюasyncиawaitв Python позволяют реализовать асинхронное программирование, что делает код неблокирующим и улучшает производительность при выполнении длительных операций ввода-вывода. -
Почему 0.1 + 0.2 != 0.3 в Python? Middle
В Python числа с плавающей запятой хранятся в двоичном формате, что приводит к неточным значениям при арифметических операциях, например, 0.1 + 0.2 не равно 0.3. Для избежания подобных проблем рекомендуется использовать округление или библиотеки, такие как
Посмотреть ответ полностьюdecimal, для точных расчетов. -
Как отсортировать список словарей по значению определенного поля? Middle
Сортировка списка словарей по значению определенного поля в Python осуществляется с помощью функции
Посмотреть ответ полностьюsorted()или методаsort(), задавая ключ для сортировки через параметрkey, часто используя лямбда-функции; при этом важно проверять наличие ключей и учитывать типы данных. -
Как перебрать все пары "ключ-значение" в словаре? Middle
Для перебора пар "ключ-значение" в словаре в Python лучше всего использовать метод
Посмотреть ответ полностью.items(), так как он предоставляет доступ к обоим элементам одновременно и является наиболее эффективным. -
Чем отличаются методы __str__ и __repr__ в классе? Middle
Методы
Посмотреть ответ полностью__str__и__repr__в Python служат для представления объектов:__str__возвращает "человеко-читаемое" представление, удобное для пользователя, в то время как__repr__предоставляет "официальное" представление, которое должно быть валидным кодом для воссоздания объекта. -
В чем разница между сериализацией через json и через pickle? Middle
JSON — это текстовый формат для передачи данных, удобный для чтения и совместимый с многими языками, но ограниченный в типах данных. Pickle, напротив, позволяет сериализовать любые объекты Python в бинарном формате, что делает его более эффективным для сложных структур, но менее безопасным и не совместимым с другими языками.
Посмотреть ответ полностью -
Что такое свойство (property) в Python и как оно используется? Middle
Свойство в Python — это механизм, позволяющий управлять доступом к атрибутам класса, обеспечивая инкапсуляцию и валидацию данных. С его помощью можно скрывать внутреннюю реализацию и добавлять логику проверки значений, что делает код более гибким и поддерживаемым.
Посмотреть ответ полностью -
Чем отличается вызов list.sort() от функции sorted()? Middle
Метод list.sort() сортирует список на месте и не возвращает нового списка, в то время как функция sorted() возвращает новый отсортированный список, не изменяя исходный объект.
Посмотреть ответ полностью -
Чем отличаются методы list.remove(), del и list.pop()? Middle
Методы
Посмотреть ответ полностьюlist.remove(),delиlist.pop()служат для удаления элементов из списка в Python:remove()удаляет по значению,del— по индексу, аpop()удаляет по индексу и возвращает удалённый элемент. -
Чем отличаются list.append() и list.extend()? Middle
Посмотреть ответ полностьюlist.append()добавляет один элемент в конец списка, тогда какlist.extend()добавляет все элементы из итерируемого объекта, что позволяет объединять списки или добавлять несколько элементов за один раз. -
Чем отличается обращение к словарю через dict[key] от dict.get(key)? Middle
Обращение к словарю через
Посмотреть ответ полностьюdict[key]требует наличия ключа и выбрасываетKeyError, если его нет, в то время какdict.get(key)безопасно возвращаетNoneили заданное значение по умолчанию, что делает его более гибким для обработки отсутствующих ключей. -
Почему для проверки на None рекомендуется использовать is вместо ==? Middle
Для проверки на
Посмотреть ответ полностьюNoneв Python рекомендуется использовать операторis, так как он проверяет идентичность объекта, в отличие от==, который сравнивает значения и может дать неожиданные результаты при переопределении метода__eq__. -
Являются ли True и False числами в Python? Middle
В Python логические значения
Посмотреть ответ полностьюTrueиFalseявляются подтипами целых чисел, гдеTrueэквивалентен1, аFalse—0, что позволяет использовать их в арифметических операциях и логических условиях. -
Как проверить, является ли объект экземпляром определенного класса? Middle
Для проверки, является ли объект экземпляром определенного класса в Python, рекомендуется использовать функцию
Посмотреть ответ полностьюisinstance(), так как она поддерживает наследование и позволяет проверять на несколько типов одновременно, в отличие от оператораtype(), который не учитывает иерархию классов. -
Назовите несколько стандартных исключений в Python. Middle
В Python существует множество стандартных исключений, таких как ValueError, TypeError, IndexError и другие, которые помогают обрабатывать ошибки во время выполнения программы, позволяя разработчикам использовать конструкции try и except для предотвращения аварийного завершения.
Посмотреть ответ полностью -
Какие специализированные контейнеры предоставляет модуль collections? Middle
Модуль
Посмотреть ответ полностьюcollectionsв Python предлагает специализированные контейнеры, такие какnamedtupleдля структурированных данных,dequeдля эффективной реализации очередей,Counterдля подсчета элементов,OrderedDictдля сохранения порядка иdefaultdictдля работы с отсутствующими ключами, что позволяет упрощать код и улучшать производительность. -
Как получить список файлов в указанной директории на Python? Middle
Чтобы получить список файлов в директории на Python, можно использовать модули
Посмотреть ответ полностьюos,globиpathlib, каждый из которых предлагает различные подходы:osдля простого получения списка,globдля поиска по шаблону, аpathlibдля более современного и удобного объектно-ориентированного интерфейса. -
Почему логические операторы and и or называют операторами короткого замыкания? Middle
Логические операторы
Посмотреть ответ полностьюandиorназывают операторами короткого замыкания, потому что они могут не вычислять все операнды для определения результата:andпрекращает выполнение, если первый операнд ложен, аor— если первый операнд истинен, что позволяет оптимизировать производительность и избегать ошибок. -
Какие встроенные функции Python позволяют проверить условие для любого или всех элементов итерируемого объекта? Middle
В Python функции
Посмотреть ответ полностьюany()иall()позволяют проверять условия для элементов итерируемых объектов:any()возвращаетTrue, если хотя бы один элемент истинный, аall()— если все элементы истинные. Эти функции полезны для валидации данных и упрощения логики проверки условий. -
Что такое frozenset? Middle
Frozenset — это неизменяемое множество в Python, которое позволяет использовать его в качестве ключей в словарях и элементов других множеств, обеспечивая уникальность элементов и поддержку операций над множествами, таких как объединение и пересечение.
Посмотреть ответ полностью -
Как обработать разные типы исключений в одном блоке try/except? Middle
В Python для обработки разных типов исключений в одном блоке
Посмотреть ответ полностьюtry/exceptможно использовать несколько блоковexceptдля конкретных исключений или перечислить их в кортеже, а также применять базовый классExceptionдля общей обработки, но важно расположить блоки от специфичных к общим и избегать игнорирования ошибок. -
Может ли в Python существовать перегрузка функций с разными параметрами? Middle
В Python отсутствует традиционная перегрузка функций, однако можно достигнуть аналогичного поведения, используя аргументы по умолчанию,
Посмотреть ответ полностью*argsи**kwargs, а также проверку типов внутри одной функции. -
Что такое переопределение (override) метода в Python? Middle
Переопределение метода в Python позволяет производным классам изменять поведение унаследованных методов базового класса, что способствует гибкости кода. Оно осуществляется с сохранением той же сигнатуры метода и может включать вызов базового метода через
Посмотреть ответ полностьюsuper(), что позволяет комбинировать логику обоих классов. -
Есть ли в Python приватные переменные? Как можно "спрятать" атрибут? Middle
В Python нет строгих приватных переменных, но можно "спрятать" атрибуты, используя соглашение с одним подчеркиванием для внутреннего использования и двойное подчеркивание для манглинга имен, что затрудняет доступ к ним извне.
Посмотреть ответ полностью -
Чем отличается одно подчеркивание (_) от двойного (__) в начале имени атрибута? Middle
Одно подчеркивание (_) указывает на «приватный» атрибут по соглашению, доступный, но нежелательный для использования извне класса, в то время как двойное подчеркивание (__) применяет механизм манглинга имен, что делает атрибут недоступным под его оригинальным именем и защищает от конфликтов в подклассах.
Посмотреть ответ полностью -
Что такое пространство имен (namespace) в Python? Middle
Пространство имен в Python — это контейнеры для управления именами переменных, функций и классов, которые помогают избежать конфликтов имен и делают код более понятным. Существуют локальные, глобальные и встроенные пространства имен, и Python ищет имена в порядке LEGB (Local, Enclosing, Global, Built-in).
Посмотреть ответ полностью -
Что делает функция zip()? Middle
Функция zip() объединяет несколько итерируемых объектов, создавая последовательность кортежей, где каждый кортеж содержит элементы на одной позиции из разных объектов, ограничиваясь длиной самого короткого.
Посмотреть ответ полностью -
Для чего нужны функции map() и filter()? Middle
Функции
Посмотреть ответ полностьюmap()иfilter()в Python позволяют эффективно обрабатывать данные из итерабельных объектов:map()применяется для преобразования элементов, аfilter()— для их отбора по заданным условиям. Обе функции возвращают итераторы, что способствует экономии памяти и упрощает код. -
Для чего служит функция enumerate()? Middle
Функция
Посмотреть ответ полностьюenumerate()в Python позволяет одновременно перебирать элементы итерируемого объекта и получать их индексы, что делает код более читаемым и удобным. Она возвращает итератор, который генерирует пары (индекс, значение), и может принимать параметрstartдля изменения начального индекса. -
Что такое генератор и чем он отличается от обычной функции? Middle
Генератор в Python — это итератор, который создает значения по мере запроса, используя
Посмотреть ответ полностьюyield, что позволяет экономить память и сохранять состояние между вызовами, в отличие от обычных функций, которые возвращают все значения сразу и не сохраняют состояние. -
Что такое именованные-only аргументы функции и как их задать? Middle
Именованные-only аргументы в Python — это параметры, которые можно передавать функции только по имени, что повышает читаемость и уменьшает вероятность ошибок. Они указываются после символа
Посмотреть ответ полностью*в определении функции и могут быть как обязательными, так и необязательными с заданными значениями по умолчанию. -
Для чего используется функция super() в Python? Middle
Функция super() в Python используется для обращения к методам родительского класса из дочернего, упрощая доступ к ним и поддерживая правильный порядок разрешения методов при множественном наследовании, что делает код более гибким и легким в сопровождении.
Посмотреть ответ полностью
Senior
-
Что такое состояние гонки (race condition) и как его можно предотвратить? Senior
Состояние гонки возникает, когда несколько потоков одновременно изменяют одни и те же данные, что может привести к непредсказуемым результатам. Для его предотвращения используются блокировки, семафоры, очереди и атомарные операции, а также важно минимизировать использование глобальных переменных и тщательно тестировать многопоточные приложения.
Посмотреть ответ полностью -
Как обойти ограничение GIL для выполнения кода на нескольких ядрах CPU? Senior
Чтобы обойти ограничение GIL в Python и эффективно использовать многопроцессорные системы, можно применять модуль multiprocessing для создания отдельных процессов, писать критически важные участки кода на C или Cython, или использовать альтернативные интерпретаторы, такие как PyPy, которые могут обойти GIL в определенных случаях.
Посмотреть ответ полностью -
Когда целесообразнее использовать потоки, а когда – процессы? Senior
Потоки лучше подходят для I/O-ориентированных задач, так как они легковесные и позволяют эффективно обмениваться данными, тогда как процессы предпочтительнее для CPU-ориентированных задач из-за возможности параллельного выполнения без ограничений GIL и высокой степени изоляции.
Посмотреть ответ полностью -
Что такое цикл событий (event loop) в asyncio? Senior
Цикл событий в asyncio управляет выполнением асинхронных задач и событий, позволяя эффективно обрабатывать операции ввода-вывода без блокировок, что улучшает производительность и отзывчивость приложений.
Посмотреть ответ полностью -
Чем асинхронное программирование (async/await) отличается от многопоточного? Senior
Асинхронное программирование позволяет выполнять I/O-операции без блокировки основного потока, используя корутины и событийный цикл, в то время как многопоточность создает несколько потоков для параллельного выполнения задач, что может быть сложно в управлении и ограничивается GIL в Python.
Посмотреть ответ полностью -
Какие альтернативные реализации Python вы знаете? (CPython, PyPy, Jython, etc.) Senior
Существует несколько реализаций Python, включая CPython, PyPy, Jython, IronPython и MicroPython, каждая из которых имеет свои особенности: CPython является стандартной и наиболее распространенной, PyPy обеспечивает высокую производительность благодаря JIT-компиляции, Jython интегрируется с Java, IronPython работает на .NET, а MicroPython предназначен для встраиваемых систем.
Посмотреть ответ полностью -
Что такое __slots__ в классе и зачем они нужны? Senior
Посмотреть ответ полностью__slots__в Python ограничивает набор атрибутов экземпляров класса, что позволяет экономить память и улучшать производительность, предотвращая создание новых атрибутов и уменьшая накладные расходы на хранение. -
Что делает метод __new__ и чем он отличается от __init__? Senior
Метод
Посмотреть ответ полностью__new__отвечает за создание нового экземпляра класса, возвращая объект, тогда как__init__инициализирует уже созданный объект, устанавливая его атрибуты.__new__используется в специфических случаях, например, с неизменяемыми типами, в то время как__init__применяется для большинства объектов. -
Что такое Method Resolution Order (MRO)? Senior
Порядок разрешения методов (MRO) в Python определяет последовательность, в которой ищутся методы и атрибуты в иерархии классов, особенно при множественном наследовании, используя алгоритм C3 Linearization для обеспечения корректного порядка.
Посмотреть ответ полностью -
В чем суть проблемы «ромбовидного» наследования (Diamond Problem) и как Python ее решает? Senior
Проблема «ромбовидного» наследования возникает при множественном наследовании, когда один и тот же базовый класс унаследован несколькими классами, что создает неопределенность в выборе метода. Python решает эту проблему с помощью механизма C3 Linearization, который определяет порядок поиска методов и атрибутов, обеспечивая четкую последовательность разрешения методов.
Посмотреть ответ полностью -
Что такое класс-mixin и зачем он нужен? Senior
Класс-mixin — это специальный класс в ООП, который добавляет функциональность другим классам через множественное наследование, не предназначен для самостоятельного использования и помогает избежать дублирования кода, обеспечивая чистоту и модульность.
Посмотреть ответ полностью -
Что такое метакласс в Python? Senior
Метаклассы в Python — это классы для классов, позволяющие управлять созданием и поведением других классов, что полезно для валидации, изменения атрибутов и динамического создания классов. Основной принцип метаклассов заключается в переопределении методов
Посмотреть ответ полностью__new__и__init__для настройки классов при их создании. -
Зачем могут применяться метаклассы? Senior
Метаклассы в Python позволяют контролировать создание классов и изменять их поведение, что может упростить код и добавить гибкость, например, через автоматизацию задач, создание интерфейсов или синтаксического сахара.
Посмотреть ответ полностью -
Чем отличается использование @decorator и @decorator() при определении функции? Senior
Разница между
Посмотреть ответ полностью@decoratorи@decorator()заключается в том, что первый используется для декораторов без аргументов, а второй — для декораторов, которые принимают параметры, что позволяет настраивать их поведение. -
Для чего используется декоратор functools.wraps? Senior
Декоратор
Посмотреть ответ полностьюfunctools.wrapsсохраняет метаданные оригинальной функции (имя, строку документации и аннотации) при её оборачивания, что упрощает отладку и поддержку кода, избегая путаницы с потерей информации о функции. -
Как реализовать свой контекстный менеджер? Senior
Контекстные менеджеры в Python управляют ресурсами, обеспечивая их автоматическое открытие и закрытие. Их можно реализовать через методы
Посмотреть ответ полностью__enter__и__exit__в классе или с помощью декоратораcontextlib.contextmanager, что упрощает код и улучшает его читаемость. -
Как можно реализовать паттерн Singleton на Python? Senior
Паттерн Singleton обеспечивает создание единственного экземпляра класса и глобальную точку доступа к нему, что можно реализовать с помощью атрибута класса, декоратора или метаклассов, в зависимости от сложности задачи и требований к инициализации.
Посмотреть ответ полностью -
Что такое абстрактный класс и как его объявить в Python? Senior
Абстрактный класс в Python — это неинстанцируемый класс, который служит основой для других классов, определяя обязательные методы для реализации в подклассах. Он используется для создания интерфейсов и улучшения структуры кода, что делает его более читаемым и поддерживаемым.
Посмотреть ответ полностью -
Какой алгоритм сортировки используется при сортировке списков в Python? Senior
В Python для сортировки списков используется алгоритм Timsort, который сочетает элементы сортировки слиянием и вставками, обеспечивая стабильную и эффективную сортировку с временной сложностью O(n log n) в среднем случае.
Посмотреть ответ полностью -
Для чего предназначена конструкция yield from? Senior
Конструкция
Посмотреть ответ полностьюyield fromв Python позволяет делегировать управление другому генератору, упрощая код и улучшая его читабельность, а также позволяя получать и возвращать значения из подгенераторов. -
Как перегрузить операторы (например +, ==) для своего класса? Senior
Перегрузка операторов в Python позволяет настраивать поведение стандартных операторов для пользовательских классов с помощью магических методов, таких как
Посмотреть ответ полностью__add__для сложения и__eq__для сравнения. -
Что такое "monkey patching" в Python? Senior
Monkey patching в Python — это метод динамического изменения поведения классов или модулей во время выполнения программы, позволяющий исправлять ошибки или добавлять функциональность без изменения исходного кода, но его использование требует осторожности из-за потенциальных проблем с совместимостью и читаемостью кода.
Посмотреть ответ полностью -
Что такое дескриптор (protocol descriptors) в Python? Senior
Дескрипторы в Python — это классы с методами
Посмотреть ответ полностью__get__,__set__и__delete__, позволяющие управлять доступом к атрибутам классов, обеспечивая инкапсуляцию логики и возможность переиспользования. -
В чем разница между методами __getattr__ и __getattribute__? Senior
Методы
Посмотреть ответ полностью__getattr__и__getattribute__в Python управляют доступом к атрибутам объектов:__getattribute__вызывается всегда при любом доступе, тогда как__getattr__- только для отсутствующих атрибутов, что позволяет обрабатывать несуществующие значения. -
Как сделать свой объект итерируемым? Senior
Чтобы сделать объект итерируемым в Python, нужно реализовать метод
Посмотреть ответ полностью__iter__, который возвращает итератор, и метод__next__, который предоставляет следующий элемент и поднимает исключениеStopIteration, когда элементы заканчиваются. -
Как сделать экземпляр класса вызываемым как функцию? Senior
Чтобы сделать экземпляр класса вызываемым как функцию, необходимо реализовать метод
Посмотреть ответ полностью__call__, который определяет действия при вызове экземпляра. Это позволяет экземплярам хранить состояние и выполнять логику, как в случае с классом, который добавляет значение к переданному аргументу. -
Как получить список атрибутов объекта во время выполнения? Senior
Для получения списка атрибутов объекта в Python можно использовать функцию
Посмотреть ответ полностьюdir(), которая возвращает все атрибуты и методы, или атрибут__dict__, содержащий только пользовательские атрибуты в виде словаря. -
Что такое метод __del__ и когда он вызывается? Senior
Метод
Посмотреть ответ полностью__del__в Python — это деструктор, который вызывается при уничтожении экземпляра класса для выполнения действий, таких как освобождение ресурсов. Его использование может быть непредсказуемым из-за особенностей сборщика мусора, поэтому предпочтительнее применять контекстные менеджеры для управления ресурсами. -
Опишите порядок поиска переменной по именам (правило LEGB). Senior
Правило LEGB описывает порядок поиска переменных в Python: сначала интерпретатор ищет в локальной области, затем во внешней, глобальной и, наконец, в встроенной. Это позволяет управлять видимостью переменных и избегать конфликтов имен.
Посмотреть ответ полностью -
Для чего используется ключевое слово nonlocal? Senior
Ключевое слово
Посмотреть ответ полностьюnonlocalв Python позволяет изменять значения переменных из внешней функции внутри вложенной функции, не объявляя их глобальными, что особенно полезно при работе с замыканиями. -
Что такое конструкция match/case в Python? Senior
Конструкция
Посмотреть ответ полностьюmatch/caseв Python, введённая в версии 3.10, позволяет выполнять сопоставление с образцом, упрощая обработку значений переменных и структур данных, что делает код более читабельным и организованным. -
Что лучше использовать для повторного использования кода: наследование или композицию? Senior
Наследование и композиция — это два способа повторного использования кода, где наследование создает иерархию классов, а композиция объединяет объекты других классов. Наследование обеспечивает полиморфизм и ясную структуру, но может привести к жесткой связи, тогда как композиция предлагает гибкость и слабую связь, но может увеличивать объем кода. Выбор между ними зависит от контекста и требований...
Посмотреть ответ полностью -
Чем отличается абсолютный импорт от относительного? Senior
Абсолютный импорт в Python указывает полный путь к модулю от корня пакета, обеспечивая ясность и избегая конфликтов имен, тогда как относительный импорт использует путь относительно текущего местоположения, что делает код короче, но может быть менее очевидным.
Посмотреть ответ полностью -
Чем тип Decimal отличается от типа float? Senior
Тип Decimal обеспечивает высокую точность для десятичных вычислений, идеально подходит для финансовых расчетов, тогда как float быстрее, но может потерять точность из-за двоичного представления.
Посмотреть ответ полностью -
Что значит писать "Pythonic" код? Senior
"Pythonic" код характеризуется читаемостью, использованием встроенных функций и библиотек, простотой и минимализмом, а также предпочтением исключений для обработки ошибок. Он следует принципам языка Python, что делает его функциональным, понятным и поддерживаемым.
Посмотреть ответ полностью -
Что такое функциональное программирование и поддерживается ли оно в Python? Senior
Функциональное программирование — это парадигма, фокусирующаяся на использовании чистых функций, неизменяемых данных и высших функций, что помогает избежать побочных эффектов и улучшить предсказуемость кода; Python поддерживает эту парадигму через функции первого класса, лямбда-функции и встроенные методы, такие как
Посмотреть ответ полностьюmapиfilter. -
Какую роль играет блок else в конструкции try/except? Senior
Блок
Посмотреть ответ полностьюelseв конструкцииtry/exceptвыполняется только при отсутствии исключений в блокеtry, что улучшает читаемость кода и позволяет четко разделять логику обработки ошибок и успешного выполнения. -
Что такое цепочка исключений (exception chaining) в Python? Senior
Цепочка исключений в Python позволяет связывать несколько исключений, улучшая отладку и понимание ошибок, используя конструкцию
Посмотреть ответ полностьюraise ... from ...для передачи контекста между исключениями. -
Можно ли декорировать класс так же, как функцию, и зачем это может быть нужно? Senior
Декорирование классов в Python позволяет изменять или расширять их поведение, добавляя новые методы или изменяя существующие, что способствует чистоте кода и его повторному использованию. Это полезно для регистрации классов, валидации и улучшения структурирования кода, упрощая его тестирование и поддержку.
Посмотреть ответ полностью -
Что такое интроспекция в Python? (Как язык позволяет изучать объекты во время выполнения?) Senior
Интроспекция в Python позволяет изучать объекты во время выполнения, предоставляя информацию о типах, атрибутах и методах, а также изменять их поведение. Этот механизм полезен для отладки, динамического программирования и создания библиотек, но требует осторожного использования, чтобы избежать снижения производительности и нарушения инкапсуляции.
Посмотреть ответ полностью -
Для чего используется функция eval() и какие риски с ней связаны? Senior
Функция eval() в Python позволяет выполнять строки кода как Python-выражения, что полезно для динамического выполнения кода, но она несет значительные риски безопасности, так как может выполнять вредоносный код, если используется с неподконтрольными данными.
Посмотреть ответ полностью -
Чем отличаются функции eval() и exec()? Senior
Функция
Посмотреть ответ полностьюeval()выполняет одно выражение и возвращает его результат, в то время какexec()выполняет многократные операторы и не возвращает значения. Оба метода небезопасны при работе с ненадежными данными и лучше избегать их использования, если есть альтернативы. -
Чем отличается SyntaxError от исключений, возникающих во время выполнения? Senior
SyntaxError возникает на этапе компиляции из-за неправильного синтаксиса, тогда как исключения во время выполнения происходят, когда код уже запущен и сталкивается с логическими ошибками или неправильными данными.
Посмотреть ответ полностью -
Назовите несколько отличий между Python 3 и Python 2. Senior
Python 3 отличается от Python 2 в таких аспектах, как кодировка строк (все строки в Python 3 текстовые), использование функции print вместо оператора, поведение деления целых чисел (возвращает float), а также возвращаемые значения функций, таких как range, которые теперь возвращают итераторы.
Посмотреть ответ полностью -
Почему Python считается медленным? Как можно повысить производительность Python-программы? Senior
Python считается медленным из-за своей интерпретируемой природы, динамической типизации и GIL. Для повышения производительности можно использовать компиляторы, оптимизировать алгоритмы, применять многопоточность и профилирование кода.
Посмотреть ответ полностью -
Что такое PEP и какова его роль в сообществе Python? Senior
PEP (Python Enhancement Proposal) — это документ, описывающий новые функции и улучшения в Python, который служит инструментом стандартизации, обсуждения и документирования предложений в сообществе, а также помогает разработчикам принимать обоснованные решения о внедрении изменений.
Посмотреть ответ полностью -
Как из Python выполнить вызов внешней программы или командной строки? Senior
Для вызова внешних программ в Python используется модуль
Посмотреть ответ полностьюsubprocess, который позволяет запускать процессы и взаимодействовать с ними, получая вывод команд. Основные функции включаютsubprocess.run()для простого выполнения команд,subprocess.Popen()для более сложного взаимодействия иsubprocess.call()для получения кода возврата. -
Что такое список __all__ в модуле и для чего он используется? Senior
Список
Посмотреть ответ полностью__all__в Python определяет, какие имена модуля будут доступны при использовании конструкцииfrom module import *, что позволяет управлять видимостью атрибутов и облегчает импорт, указывая на публичные элементы модуля. -
Какой принцип описывает фраза "Лучше прощение, чем разрешение" (EAFP) и как это проявляется в Python? Senior
Принцип "Лучше прощение, чем разрешение" (EAFP) в Python предполагает, что разработчик предполагает успешность операции и обрабатывает возникающие ошибки вместо предварительной проверки условий, что делает код более лаконичным и читаемым.
Посмотреть ответ полностью -
Что такое «Дзен Python» (Zen of Python)? Senior
«Дзен Python» — это набор принципов, сформулированных Тимом Петерсом, который помогает разработчикам писать более красивый, понятный и поддерживаемый код, акцентируя внимание на явности, простоте и читабельности.
Посмотреть ответ полностью -
Что такое sys.path и как он влияет на импорт модулей? Senior
Посмотреть ответ полностьюsys.path— это список путей, по которым Python ищет модули для импорта, включая текущий каталог и стандартные библиотеки. Его можно изменять во время выполнения, добавляя новые пути, однако лучше избегать таких изменений для предотвращения путаницы в проектах. -
Что такое виртуальное окружение (virtual environment) Python и для чего оно используется? Senior
Виртуальное окружение в Python — это изолированная среда для управления зависимостями и библиотеками, позволяющая избежать конфликтов между проектами и упростить развертывание приложений.
Посмотреть ответ полностью -
Что такое deadlock (взаимная блокировка) в многопоточности? Senior
Взаимная блокировка — это ситуация в многопоточном программировании, когда два или более потока навсегда останавливаются, ожидая освобождения ресурсов, заблокированных другими потоками. Она возникает при выполнении четырех условий: взаимного исключения, удержания и ожидания, невозможности принудительного освобождения и циклического ожидания. Чтобы избежать взаимной блокировки, важно упорядочить...
Посмотреть ответ полностью -
Какой по умолчанию максимальный размер глубины рекурсии в Python и как его изменить? Senior
Максимальная глубина рекурсии в Python по умолчанию составляет 1000 и может быть изменена с помощью функции
Посмотреть ответ полностьюsys.setrecursionlimit(), но увеличение этого значения следует использовать осторожно, так как это может привести к переполнению стека и замедлению выполнения программы. -
Возможна ли утечка памяти в Python? Приведите пример. Senior
В Python возможны утечки памяти, особенно из-за циклических ссылок, долгоживущих объектов и замыканий, что может привести к неосвобождению памяти. Чтобы избежать этого, можно использовать слабые ссылки, регулярно очищать кэши и профилировать использование памяти.
Посмотреть ответ полностью -
Назовите несколько отличий Python от Java. Senior
Python отличается от Java более лаконичным синтаксисом и динамической типизацией, что упрощает написание кода, тогда как Java более строгий и статически типизированный, что способствует обнаружению ошибок на этапе компиляции. Python гибок в парадигмах программирования и имеет богатую экосистему для научных задач, в то время как Java обеспечивает высокую производительность и надежность для...
Посмотреть ответ полностью -
Каковы основные недостатки или ограничения Python? Senior
Python имеет ограничения по скорости выполнения из-за интерпретации кода, потребляет больше памяти по сравнению с другими языками, использует глобальную блокировку интерпретатора, что затрудняет многопоточность, менее распространён в мобильной разработке и может вызывать проблемы с динамической типизацией, что влияет на отладку.
Посмотреть ответ полностью -
Что такое позиционные-only аргументы функции и как их объявить? Senior
Позиционно-only аргументы в Python — это аргументы, которые можно передавать только по позиции, а не по имени, что упрощает интерфейс функций и улучшает предсказуемость кода. Они объявляются с помощью слэша (
Посмотреть ответ полностью/) в сигнатуре функции, и их использование особенно полезно, когда порядок аргументов критически важен.