Модули


Модули позволяют структурировать программы, упростить повторное использование кода, избежать конфликтов имен. 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. Программный код этого файла автоматически запускается при импорте пакета в первый раз.