Повторное использование кода. Модули и пакеты в python.

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

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.