Модули и импорты

Для разбития программы на модули удобно использовать импорты.

Для импорта какого-либо модуля нужно написать:

import имя_модуля
Например, чтобы использовать математические функции:
import math
Доступ к какой-то функции:
модуль.имя_функции
Например:
math.sqrt(9) # вернёт 3.0
Для того, чтобы узнать, что есть в модуле, гуглите «python имя_модуля». Либо можем сделать так:
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
Функция dir покажет список доступных имён в модуле.

Обычно модули находятся в папке место_установки_питонаLib. Можете зайти и посмотреть. Только вряд ли вы найдёте там математический модуль, поскольку он написан на C (банально из-за скорости).

Можно импортировать отдельные вещи из модуля, например:
from math import sqrt, pi
Тогда уже можно обращаться с ним просто, как к sqrt и pi:
>>> sqrt(9)
3.0
>>> pi
3.141592653589793

Можно импортировать и всё:
from math import *
Но это считают плохим стилем, могут быть конфликты имён. И при чтении чужого кода с такими импортами может быть непонятно, откуда взята та или иная функция.

Как же использовать импорты для разбития программы на модули?
В одной папке создадим следующие файлы:
> module.py
# coding: utf-8

def func():
    print «Successfully imported.»


> main.py
# coding: utf-8
import module
def main():
    module.func()
if __name__ == '__main__':
    main()
Итак, что же на самом деле делает импорт? Импорт выполняет файл, все функции, классы, переменные и т.д. теперь доступны там, где выполнялся импорт.

Здесь используется такая конструкция:
if __name__ == '__main__':
    main()
Это нужно для того, чтобы главная функция программы (main()) выполнялась только тогда, когда мы запускаем саму программу, а не, например, импортируем её.


Если из меня хуёвый писатель или вы что-то не поняли, пишите в комментарии или заходите в нашу jabber-конференцию: python-b@conference.jabber.ru

Автор: Бихтсэ
Дата публикации: 2012-09-16T08:14:00.003-07:00