Что такое модуль __init__.py?
Модуль
Модуль
__init__.py
является частью организации пакетов (packages) в Python. Этот файл используется для определения директории как пакета и может содержать код и переменные, которые будут доступны при импорте пакета. Важно отметить, что __init__.py
не является обязательным для всех директорий, но он необходим, чтобы Python интерпретировал директорию как пакет.Что такое wheel и eggs в Python? Какая между ними разница?
Python wheel — это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом. Расширение файла wheel — .whl
Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg
Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.
Python wheel — это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом. Расширение файла wheel — .whl
Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg
Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.
Что такое shallow copy и как используется?
Shallow copy — это создание нового объекта путем копирования ссылки на вложенный объект, вместо создания полной копии вложенного объекта.
Если мы копируем список, который содержит другие списки, при shallow copy будут скопированы только внешние списки.
Если изменить внутренний список в копии, то это отразится и на оригинале.
Основное отличие от deep copy в том, что при полном копировании создаются копии всех вложенных объектов до самого нижнего уровня.
Shallow copy — это создание нового объекта путем копирования ссылки на вложенный объект, вместо создания полной копии вложенного объекта.
Если мы копируем список, который содержит другие списки, при shallow copy будут скопированы только внешние списки.
Если изменить внутренний список в копии, то это отразится и на оригинале.
Основное отличие от deep copy в том, что при полном копировании создаются копии всех вложенных объектов до самого нижнего уровня.
Что такое магические методы?
Магические методы — это специальные методы класса, которые начинаются и заканчиваются двумя символами подчеркивания.
Они вызываются автоматически интерпретатором Python при определенных действиях и используются для эмуляции встроенных в язык структур и функций.
Реализуя магические методы в своем классе, программист может определить поведение класса при различных операциях и сделать его похожим на встроенные типы.
Магические методы — это специальные методы класса, которые начинаются и заканчиваются двумя символами подчеркивания.
Они вызываются автоматически интерпретатором Python при определенных действиях и используются для эмуляции встроенных в язык структур и функций.
Реализуя магические методы в своем классе, программист может определить поведение класса при различных операциях и сделать его похожим на встроенные типы.
Что такое pickling и unpickling?
Модуль pickle принимает любой объект Python, преобразует его в строковое представление и сохраняет в файл с помощью функции dump, такой процесс называется pickling.
Процесс извлечения исходных объектов Python из сохраненного строкового представления называется unpickling.
Модуль pickle принимает любой объект Python, преобразует его в строковое представление и сохраняет в файл с помощью функции dump, такой процесс называется pickling.
Процесс извлечения исходных объектов Python из сохраненного строкового представления называется unpickling.
Что значит *args, **kwargs? И зачем нам их использовать?
Мы используем *args, когда не уверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
#вопросы_с_собеседований
Мы используем *args, когда не уверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
#вопросы_с_собеседований
Чем файл .pyc отличается от файла .py?
Хотя оба файла содержат байт-код, .pyc — это скомпилированная версия файла Python . Он имеет независимый от платформы байт-код.
Следовательно, мы можем выполнить его на любой платформе, поддерживающей формат .pyc.
Python автоматически генерирует его для повышения производительности (с точки зрения времени загрузки, а не скорости).
Следовательно, мы можем выполнить его на любой платформе, поддерживающей формат .pyc.
Python автоматически генерирует его для повышения производительности (с точки зрения времени загрузки, а не скорости).
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для чего нужен модуль warning?
Модуль warning используется для вывода предупреждений во время выполнения программы.
Предупреждения отличаются от исключений тем, что не прерывают нормальный ход программы.
Они позволяют уведомить разработчика о потенциальных проблемах или нежелательных ситуациях в коде, но при этом не останавливать его выполнение.
Основные причины для использования предупреждений:
— Уведомить о неэффективных конструкциях в коде, которые можно оптимизировать.
— Предупредить об устаревших методах или функциях, которые могут быть удалены в будущих версиях.
— Обозначить использование ненадежных внешних данных или API.
— Выявить подозрительные ситуации, которые не являются критичными ошибками, но требуют внимания.
Предупреждения отличаются от исключений тем, что не прерывают нормальный ход программы.
Они позволяют уведомить разработчика о потенциальных проблемах или нежелательных ситуациях в коде, но при этом не останавливать его выполнение.
Основные причины для использования предупреждений:
— Уведомить о неэффективных конструкциях в коде, которые можно оптимизировать.
— Предупредить об устаревших методах или функциях, которые могут быть удалены в будущих версиях.
— Обозначить использование ненадежных внешних данных или API.
— Выявить подозрительные ситуации, которые не являются критичными ошибками, но требуют внимания.
Что можно передать в конструктор исключения?
В конструктор исключения можно передать любые аргументы, которые помогут потом разобраться в причине возникновения исключения.
Обычно в конструктор передают как минимум сообщение, описывающее проблему. Это позволяет потом вывести это сообщение с помощью метода args исключения и таким образом понять, что именно пошло не так.
Также хорошей практикой считается передавать код ошибки — некий уникальный идентификатор проблемы. Это упрощает обработку конкретных исключений в программе.
Обычно в конструктор передают как минимум сообщение, описывающее проблему. Это позволяет потом вывести это сообщение с помощью метода args исключения и таким образом понять, что именно пошло не так.
Также хорошей практикой считается передавать код ошибки — некий уникальный идентификатор проблемы. Это упрощает обработку конкретных исключений в программе.
Что делают StringIO и BytesIO?
StringIO и BytesIO — это классы из стандартной библиотеки, которые позволяют обрабатывать строки и байты как файлоподобные объекты.
StringIO предназначен для работы с текстом. Он позволяет записывать строки в объект и считывать их оттуда же, имитируя файловый интерфейс.
Это удобно для работы со строками в местах, где ожидается файл — например, для mock-объектов.
BytesIO выполняет ту же роль для байтов — позволяет записывать байты в объект и считывать их как файл.
Это удобно для имитации файлового ввода/вывода в памяти или для работы с двоичными данными.
В целом, эти классы упрощают работу с текстом и двоичными данными, эмулируя файловый интерфейс для строк и байтов в памяти.
StringIO предназначен для работы с текстом. Он позволяет записывать строки в объект и считывать их оттуда же, имитируя файловый интерфейс.
Это удобно для работы со строками в местах, где ожидается файл — например, для mock-объектов.
BytesIO выполняет ту же роль для байтов — позволяет записывать байты в объект и считывать их как файл.
Это удобно для имитации файлового ввода/вывода в памяти или для работы с двоичными данными.
В целом, эти классы упрощают работу с текстом и двоичными данными, эмулируя файловый интерфейс для строк и байтов в памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните, как в Python осуществляется управление памятью.
В Python объекты и структуры данных data structures находятся в закрытой динамически выделяемой области private heap, которая управляется менеджером памяти Python. Он делегирует часть работы программам распределения ресурсов allocators, закрепленным за конкретными объектами, и одновременно с этим следит, чтобы они не выходили за пределы динамически выделяемой области.
По факту данной областью управляет интерпретатор interpreter. Пользователь никак не контролирует данный процесс, даже когда манипулирует ссылками объектов на блоки памяти внутри динаической области. Менеджер памяти Python распределяет пространство динамической области среди объектов и другие внутренние буферы по требованию.
По факту данной областью управляет интерпретатор interpreter. Пользователь никак не контролирует данный процесс, даже когда манипулирует ссылками объектов на блоки памяти внутри динаической области. Менеджер памяти Python распределяет пространство динамической области среди объектов и другие внутренние буферы по требованию.