Важно знать, что модуль загружается лишь однажды, независимо от того, сколько раз он был импортирован. Это препятствует цикличному выполнению содержимого модуля.
Команда from ... import позволяет вам импортировать не весь модуль целиком, а только определенное его содержимое. Например:
| # Импортируем из модуля math функцию sqrt
| from math import sqrt
| # Выводим результат выполнения функции sqrt.
| # Обратите внимание, что нам больше незачем указывать имя модуля
| print (sqrt(144))
|
| # Но мы уже не можем получить из модуля то, что не импортировали
| print (pi) # Выдаст ошибку
Выражение from ... import не импортирует весь модуль, а только предоставляет доступ к конкретным объектам, которые мы указали.
В Python так же возможно импортировать всё (переменные, функции, классы) за раз из модуля, для этого используется конструкция from ... import *. Например:
| from math import *
| # Теперь у нас есть доступ ко всем функция и переменным, определенным в модуле math
|
| print (sqrt(121))
| print (pi)
| print (e)
Однако это конструкцию следует использовать с осторожностью, поскольку при импортировании нескольких модулей можно запутаться в своем собственном коде.
Когда вы импортируете модуль, интерпретатор Python ищет этот модуль в следующих местах:
1. Директория, в которой находится файл, в котором вызывается команда импорта
2. Если модуль не найден, Python ищет в каждой директории, определенной в консольной переменной PYTHONPATH.
3. Если и там модуль не найден, Python проверяет путь заданный по умолчанию
*
Путь поиска модулей сохранен в системном модуле sys в переменной path. Переменная sys.path содержит все три вышеописанных места поиска модулей.
Для того, чтобы получить список всех модулей, установленных на вашем компьютере достаточно выполнить команду:
| help("modules")
Через несколько секунд вы получите список всех доступных модулей.
Чтобы создать свой модуль в Python достаточно сохранить ваш скрипт с расширением .py Теперь он доступен в любом другом файле. Например, создадим два файла: module_1.py и module_2.py и сохраним их в одной директории. В первом запишем:
| def hello():
| print ("Hello from module_1")
А во втором вызовем эту функцию:
| from module_1 import hello
|
| hello()
Выполнив код второго файла получим:
Hello from module_1
Встроенная функция dir() возвращает отсортированный список строк, содержащих все имена, определенные в модуле.
| # на данный момент нам доступны лишь встроенные функции
| dir()
| # импортируем модуль math
| import math
| # теперь модуль math в списке доступных имен
| dir()
| # получим имена, определенные в модуле math
| dir(math)
Код на Python может быть организован следующим образом:
* Первый уровень это обычные команды на Python.
* Команды на Python могут быть собраны в функции.
* Функции могут быть частью класса.
* Классы могут быть определены внутри модулей.
* Наконец, модули могут составляться в пакеты модулей.
Отдельные файлы-модули с кодом на Python могут объединяться в пакеты модулей. Пакет это директория (папка), содержащая несколько отдельных файлов-скриптов.
Например, имеем следующую структуру:
|_ my_file.py
|_ my_package
|_ __init__.py
|_ inside_file.py
В файле inside_file.py определена некая функция foo. Тогда чтобы получить доступ к функции foo, в файле my_file следует выполнить следующий код:
from my_package.inside_file import foo
Так же обратите внимание на наличие внутри директории my_package файла __init__.py. Это может быть пустой файл, который сообщает Python, что данная директория является пакетом модулей. В Python 3.3 и выше включать файл __init__.py в пакет модулей стало необязательно, однако, рекомендуется делать это ради поддержки обратной совместимости.
Работа с файлами в Python
Published: 21 May 2015