# 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 выполнит следующие действия:
module.py
. Если это первый импорт этого модуля, Python найдет файл module.py
в одном из каталогов, указанных в sys.path
.module.py
, в данном случае определив функцию hello()
.main.py
и выполняет оставшийся код.module.hello()
, что приведет к печати "Hello from module!" в консоль.Возможные вопросы на собеседовании и примерные ответы:
main.py
?
main.py
в консоль будет выведено "Hello from module!".
module.py
?
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 *
импортирует все имена (функции, классы, переменные) из модуля в текущее пространство имен. Последний вариант может привести к конфликтам имен, если в текущем файле уже есть имена, совпадающие с именами в импортируемом модуле, и потому обычно считается плохой практикой.
importlib.reload(module)
. В более старых версиях приходилось использовать reload(module)
(из встроенной функции reload
, которая в 3.x переехала в importlib
). Однако, перезагрузка модуля может быть опасной и привести к непредсказуемым результатам, особенно если модуль содержит классы или другие сложные структуры данных. Лучше избегать перезагрузки модулей в производственном коде.