Что выведет этот код?


# module.py
def hello():
    print("Hello from module!")

# main.py
import module
module.hello()

Код корректный. При запуске main.py на экран будет выведено сообщение "Hello from module!".

import module импортирует модуль module.py.

module.hello() вызывает функцию hello(), определенную в модуле module.


Разбор задачи и возможные вопросы на собеседовании

Данный код демонстрирует базовый импорт модуля в Python. Он состоит из двух файлов: module.py, содержащего функцию hello(), и main.py, который импортирует этот модуль и вызывает функцию hello().

Выполнение кода:

При запуске main.py интерпретатор Python выполнит следующие действия:

  1. Импортирует модуль module.py. Если это первый импорт этого модуля, Python найдет файл module.py в одном из каталогов, указанных в sys.path.
  2. Выполнит код внутри module.py, в данном случае определив функцию hello().
  3. Возвращается в main.py и выполняет оставшийся код.
  4. Вызывает функцию module.hello(), что приведет к печати "Hello from module!" в консоль.

Возможные вопросы на собеседовании и примерные ответы:

  • Вопрос: Что произойдет при запуске main.py?
    Ответ: При запуске main.py в консоль будет выведено "Hello from module!".
  • Вопрос: Как Python ищет модуль module.py?
    Ответ: Python ищет модули в списке каталогов, указанных в переменной sys.path. Обычно этот список включает текущий каталог, каталоги установки Python и каталоги, добавленные через переменную окружения PYTHONPATH.
  • Вопрос: Что произойдет, если файл module.py не будет найден?
    Ответ: Будет выброшено исключение ModuleNotFoundError (или ImportError в более старых версиях Python).
  • Вопрос: Что произойдет, если в module.py будет синтаксическая ошибка?
    Ответ: При попытке импорта module.py будет выброшено исключение SyntaxError.
  • Вопрос: Можно ли импортировать модуль иначе? Например, как from module import hello?
    Ответ: Да, это другой способ импорта. В этом случае, функция hello() импортируется непосредственно в пространство имен main.py, и ее можно будет вызывать просто как hello(), а не module.hello().
  • Вопрос: В чем разница между import module и from module import *?
    Ответ: import module импортирует весь модуль, и доступ к его содержимому осуществляется через module.имя_функции или module.имя_переменной. from module import * импортирует все имена (функции, классы, переменные) из модуля в текущее пространство имен. Последний вариант может привести к конфликтам имен, если в текущем файле уже есть имена, совпадающие с именами в импортируемом модуле, и потому обычно считается плохой практикой.
  • Вопрос: Что такое пространство имен (namespace) в Python?
    Ответ: Пространство имен - это отображение имен на объекты. Оно позволяет избежать конфликтов имен. Каждый модуль имеет свое собственное пространство имен. Импорт позволяет получить доступ к этим пространствам имен.
  • Вопрос: Как перезагрузить модуль, если он был изменен после первого импорта?
    Ответ: В Python 3.4 и выше можно использовать importlib.reload(module). В более старых версиях приходилось использовать reload(module) (из встроенной функции reload, которая в 3.x переехала в importlib). Однако, перезагрузка модуля может быть опасной и привести к непредсказуемым результатам, особенно если модуль содержит классы или другие сложные структуры данных. Лучше избегать перезагрузки модулей в производственном коде.
0