- Часть I. Вводное руководство
- Глава 2. Использование интерпретатора
- 2.2. Интерпретатор и его среда
- 6.1. Создание и использование модулей
6.1. Создание и использование модулей
Модуль — файл, содержащий определения и другие инструкции языка Python. Имя файла образуется путем добавления к имени модуля суффикса (расширения) '.py'. В пределах модуля, его имя доступно в глобальной переменной __name__. Например, используя Ваш любимый текстовый редактор, создайте в текущем каталоге файл с именем 'fibo.py' следующего содержания1:
'''\
Genegaciia i vivod chisel Fibonachi
'''
def fib(n):
'''Vivodit posledovatelnost chisel Fibonachi, ne previshayshix n'''
a, b = 0, 1
while b < n:
print b,
a, b = b, a + b
def fib2(n):
'''Vozvrashaet spisok, sodergashiy chisla riada Fibonachi, ne previshayshix n'''
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a + b
return result
Теперь запустите интерпретатор и импортируйте только что созданный модуль:
>>> import fibo
Эта инструкция не вводит имена функций, определенных в fibo прямо в текущее пространство имён, она только вводит имя модуля fibo. Используя имя модуля, Вы можете получить доступ к функциям:
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'
Если Вы собираетесь использовать функцию часто, можете присвоить ее локальной переменной:
>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Модуль может содержать любые инструкции, предназначенные для его инициализации, а не только определения функций. Они выполняются, только когда модуль импортируется первый раз.
Каждый модуль имеет собственное пространство имен, являющееся глобальной областью видимости для всех определенных в нём функций. Таким образом, автор модуля может использовать глобальные переменные, не беспокоясь о возможных конфликтах с глобальными переменными пользователя. С другой стороны, если Вы знаете, что делаете, Вы можете получить доступ к глобальным переменным модуля точно так же, как и к его функциям (на самом деле, функции тоже являются переменными), modname.itemname.
Модули могут импортировать другие модули. Обычно инструкцию import располагают в начале модуля или программы. Имена импортируемых модулей помещаются в текущее пространство имен импортирующего модуля или программы.
Другой вариант инструкции import импортирует имена из модуля непосредственно в текущее пространство имен:
>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
В этом случае имя модуля не будет представлено в текущей области видимости (в приведённом примере, имя fibo не определено).
Еще один вариант инструкции import позволяет импортировать все имена, определённые в модуле, кроме имён, начинающихся с символа подчеркивания ('_'):
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Часто возникает необходимость импортировать модуль или объект модуля, используя для него локальное имя, отличное от исходного. Например, следующий код позволяет заменить имя string на _string (которое не будет импортироваться инструкцией 'from my_module import *') при написании модуля:
import string
_string = string
del string
Ещё один пример показывает, как можно избежать конфликта имёни, определенного в модуле, со встроенным именем:
import anydbm
dbopen = anydbm.open
Начиная с версии 2.0, подобные операции можно произвести гораздо проще (и безопаснее) благодаря расширению синтаксиса инструкции import:
import string as _string
from anydbm import open as dbopen
Следует заметить, что as не является зарезервированным словом, и Вы можете по-прежнему определять переменные с таким именем.
Если имя модуля, который необходимо импортировать, становится известным только во время выполнения программы, Вы можете воспользоваться инструкцией exec ("exec 'import ' + module_name") или встроенной функцией __import__() (см. раздел 12).
- Исходный код файла прикреплён в конце раздела.