InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Глава 6. Модули


Если Вы выйдете из интерпретатора Python, а затем зайдете снова, то все определения, которые Вы сделали (функции и переменные), будут потеряны. Поэтому, если Вы хотите написать программу побольше, то будет лучше подготовить ввод в каком-нибудь текстовом редакторе и запустить интерпретатор с созданным файлом, вместо ввода. Это называется созданием скрипта. Когда Ваша программа становится длиннее, Вы можете захотеть разбить ее, для удобства, на несколько файлов. А может, Вы захотите использовать некоторые полезные функции, уже написанные Вами, в нескольких программах, без копирования их определений в эти программы.

Для поддержки всего этого, в Python есть способ помещения определения в файл и их последующего использования в скрипте или интерактивном режиме интерпретатора. Такой файл называется модулем; определения из модуля могут быть импортированы в другие модули или в модуль main (коллекция переменных, к которым у Вас есть доступ в выполняющемся скрипте, на самом верхнем уровне, или в режиме калькулятора).

Модуль - это файл, содержащий определения и операторы Python. Имя этого файла совпадает с именем модуля и, кроме этого, имеет расширение .py . Внутри модуля, его имя (в виде строки) доступно как значение глобальной переменной __name__ . К примеру, воспользуйтесь своим любимым текстовым редактором, и создайте файл с именем fibo.py в текущей директории и следующего содержания:

# Модуль чисел Фибоначчи
def fib(n): # Вывод первых n чисел Фибоначчи
    a, b = 0, 1
    while b < n :
          print b,
          a, b = b, a+b
def fib2(n): # Возвращает первые n чисел Фибоначчи
    result = []
    a, b = 0, 1
    while b < n :
          result.append (b)
          a, b = b, a+b
    return result

Теперь запустите интерпретатор Python и импортируйте этот модуль следующей командой:

>>> 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=fino.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>>

6.1 Дополнительно о модулях


Кроме определений функций, модуль может содержать операторы для исполнения. Они предназначены для инициализации модуля. Поэтому, эти операторы выполняются только один раз, когда модуль куда-то импортируется 11 .

Каждый модуль имеет свою собственную таблицу символов, которая используется в качестве глобальной таблицы символов для всех функций, определенных в модуле. Благодаря этому, автор модуля может использовать глобальные переменные в модуле без опасений конфликтов с пользовательскими глобальными переменными. С другой стороны, если Вы знаете, что делаете, то можете получить доступ к модульным глобальным переменным, используя такую же нотацию, что для обращения к его функциям, 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 не определено).

Существует также разновидность, импортирующая все имена, определенные в модуле:

>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
>>>

При этом импортируются все имена, за исключением начинающихся символом подчеркивания (_).


6.2 Стандартные модули


Python поставляется с библиотекой стандартных модулей, описанной в отдельном документе ("Справочник библиотеки Python" 12 ). Несколько модулей встроены в сам интерпретатор; они предоставляют доступ к операциям, которые не входят в ядро языка, но тем не менее, встроены в интерпретатор, по соображениям эффективности, либо для предоставления доступа к примитивам операционной системы, таким как системные вызовы. Набор таких модулей зависит от конфигурации; например, модуль amoeba предоставляется только на тех операционных системах, которые хоть как-то поддерживают примитивы Amoeba. Модуль sys является особым и заслуживает некоторого внимания, он встроен в каждый интерпретатор Python. Переменные sys.ps1 и sys.ps2 определяют строки, используемые для первичного и вторичного приглашений:

>>> import sys
>>> sys.ps1
‘>>> ’
>>> sys.ps2
‘... ’
>>> sys.ps1 = ‘C> ’
C> print ‘Yuck!’
Yuck!
C>

Эти две переменные определены только в случае, когда интерпретатор находится в интерактивном режиме.

Переменная sys.path представляет собой список строк, определяющих для интерпретатора пути поиска модулей. Она инициализируется значением переменной окружения под именем PYTHONPATH , или встроенным значением по умолчанию, если PYTHONPATH не установлен. Вы можете модифицировать переменную sys.path , используя стандартные операции для списков. Пример:

>>> import sys
>>> sys.path.append (‘/ufs/guido/lib/python’)
>>>

6.3 Функция dir()


Встроенная функция dir используется для нахождения всех имен, определенных в модуле. Она возвращает сортированный список строк:

>>> import fibo, sys
>>> dir(fibo)
[‘__name__’, ‘fib’, ‘fib2’]
>>> dir (sys)
[‘__name__’, ‘argv’, ‘builtin_module_names’, ‘copyright’, ‘exit’,
‘maxint’, ‘modules’, ‘path’, ‘ps1’, ‘ps2’, ‘setprofile’, ‘settrace’,
‘stderr’, ‘stdin’, ‘stdout’, ‘version’]
>>>

dir() без аргументов возвращает список текущих, определенных Вами имен:

>>> a=[1,2,3,4,5]
>>> import fibo, sys
>>> fib=fibo.fib
>>> dir()
[‘__name__’, ‘a’, ‘fib’, ‘fibo’, ‘sys’]
>>>

Примечание: в этот список включаются все типы имен: переменные, модули, функции, и т. д.

dir() не возвращает имена встроенных функций и переменных. Если Вам нужен их список, то они определены в стандартном модуле __builtin__:

>>> import __builtin__
>>> dir(__builtin__)
[‘AccessError’, ‘AttributeError’, ‘ConflictError’, ‘EOFError’,
‘IOError’, ‘ImportError’, ‘IndexError’, ‘KeyError’,
‘KeyboardInterrupt’, ‘MemoryError’, ‘NameError’, ‘None’,
‘OverflowError’, ‘RuntimeError’, ‘ZeroDivisionError’, ‘__name__’
‘abs’, ‘apply’, ‘chr’, ‘cmp’, ‘coerce’, ‘compile’, ‘dir’, ‘divmod’
‘eval’, ‘execfile’, ‘filter’, ‘float’, ‘getattr’, ‘hasattr’,
‘hash’, ‘hex’, ‘id’, ‘input’, ‘int’, ‘len’, ‘long’, ‘map’, ‘max’,
‘min’, ‘oct’, ‘open’, ‘ord’, ‘pow’, ‘range’, ‘raw_input’, ‘reduce’
‘reload’, ‘repr’, ‘round’, ‘setattr’, ‘str’, ‘type’, ‘xrange’]
>>>

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua