| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Глава 6. Модули Если Вы выйдете из интерпретатора Python, а затем зайдете снова, то все определения, которые Вы сделали (функции и переменные), будут потеряны. Поэтому, если Вы хотите написать программу побольше, то будет лучше подготовить ввод в каком-нибудь текстовом редакторе и запустить интерпретатор с созданным файлом, вместо ввода. Это называется созданием скрипта. Когда Ваша программа становится длиннее, Вы можете захотеть разбить ее, для удобства, на несколько файлов. А может, Вы захотите использовать некоторые полезные функции, уже написанные Вами, в нескольких программах, без копирования их определений в эти программы. Для поддержки всего этого, в Python есть способ помещения определения в файл и их последующего использования в скрипте или интерактивном режиме интерпретатора. Такой файл называется модулем; определения из модуля могут быть импортированы в другие модули или в модуль main (коллекция переменных, к которым у Вас есть доступ в выполняющемся скрипте, на самом верхнем уровне, или в режиме калькулятора). Модуль - это файл, содержащий определения и операторы Python. Имя этого файла совпадает с именем модуля и, кроме этого, имеет расширение # Модуль чисел Фибоначчи 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.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 . Каждый модуль имеет свою собственную таблицу символов, которая используется в качестве глобальной таблицы символов для всех функций, определенных в модуле. Благодаря этому, автор модуля может использовать глобальные переменные в модуле без опасений конфликтов с пользовательскими глобальными переменными. С другой стороны, если Вы знаете, что делаете, то можете получить доступ к модульным глобальным переменным, используя такую же нотацию, что для обращения к его функциям, Модули могут импортировать другие модули. Принято, хотя не обязательно, размещать все операторы Существует разновидность оператора >>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>> Однако, этот способ не вводит имя модуля из которого мы импортируем в локальную таблицу символов (так, в примере, имя Существует также разновидность, импортирующая все имена, определенные в модуле: >>> from fibo import * >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>> При этом импортируются все имена, за исключением начинающихся символом подчеркивания (_). 6.2 Стандартные модули Python поставляется с библиотекой стандартных модулей, описанной в отдельном документе ("Справочник библиотеки Python" 12 ). Несколько модулей встроены в сам интерпретатор; они предоставляют доступ к операциям, которые не входят в ядро языка, но тем не менее, встроены в интерпретатор, по соображениям эффективности, либо для предоставления доступа к примитивам операционной системы, таким как системные вызовы. Набор таких модулей зависит от конфигурации; например, модуль >>> import sys >>> sys.ps1 ‘>>> ’ >>> sys.ps2 ‘... ’ >>> sys.ps1 = ‘C> ’ C> print ‘Yuck!’ Yuck! C> Эти две переменные определены только в случае, когда интерпретатор находится в интерактивном режиме. Переменная >>> import sys >>> sys.path.append (‘/ufs/guido/lib/python’) >>> 6.3 Функция Встроенная функция >>> 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’] >>>
>>> a=[1,2,3,4,5] >>> import fibo, sys >>> fib=fibo.fib >>> dir() [‘__name__’, ‘a’, ‘fib’, ‘fibo’, ‘sys’] >>> Примечание: в этот список включаются все типы имен: переменные, модули, функции, и т. д.
>>> 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’] >>> [Назад][Содержание][Вперед] |
|
| ||||||||||||||||
|