Модули
Модули позволяют структурировать программы, упростить повторное использование кода, избежать конфликтов имен. Python содержит огромную коллекцию модулей (стандартная библиотека). Модули можно объединять в пакеты. Для получения доступа к атрибутам модуля, его необходимо импортировать. Импортирование осуществляется с помощью оператора import. Можно использовать две формы этого оператора import и from-import. В первом случае в глобальное пространство имен импортируется имя модуля, поэтому при доступе к атрибуту необходимо записывать имя модуля и через точку имя атрибута. Второй вариант импортирует в глобальное пространство имен имя атрибута, что позволяет обращаться к нему напрямую. Оба варианта загружают весь модуль целиком. При импорте можно связать атрибут с другим именем. Для получения прямого доступа ко всем атрибутам модуля можно использовать знак *.
>>> import math
>>> print math.sin(0)
0.0
>>> print math.cos(0)
1.0
>>>
>>> from math import sin
>>> sin(0)
0.0
>>> from math import sin as mysin
>>> mysin(0)
0.0
>>>
>>> from math import *
>>> sin(0), cos(0)
(0.0, 1.0)
>>>
Для избежания конфликтов имен желательно как можно меньше использовать инструкцию from. Для обновления модуля можно использовать функцию reload.
У каждого модуля существует встроенный атрибут __name__, который позволяет использовать файл в качестве модуля и в качестве исполняемого файла. Если файл выполняется, то атрибуту __name__ присваивается значение __main__. Если файл используется как модуль, то атрибуту __name__ присваивается имя модуля. Например, создадим файл test.py, содержащий
def hello():
print 'Hello, World!'
if __name__ == '__main__':
hello()
Этот файл можно использовать как модуль
$ python
>>> import test
>>> test.hello()
Hello, World!
>>>
и как отдельную программу
$ python test.py
Hello, World!
Пакеты
Пакеты позволяют организовать структурирование модулей. Фактически пакет — это каталог, содержащий подкаталоги (подпакеты), внутри которых находятся модули. Доступ к модулям осуществляется с использованием точки. Например, пакет package имеет следующую структуру
package/
__init__.py
module1.py
module2.py
module3.py
package1/
__init__.py
module11.py
module12.py
module13.py
package2/
__init__.py
module21.py
module22.py
module23.py
package3/
__init__.py
module31.py
module32.py
module33.py
Если необходимо получить доступ к функции myfunc(), находящейся в файле module33.py, то для импорта можно использовать команду
import package.package3.module33.myfunc()
Каждый каталог, являющийся пакетом, должен содержать файл __init__.py. Программный код этого файла автоматически запускается при импорте пакета в первый раз.